Estácio-FIC Graduação em Redes de Computadores Disciplina Programação para Servidores Aula 11 Scripts com janelas
Sumário Introdução; Caixa de diálogo; Tipos de caixas de diálogo.
Introdução Para melhorar a aparência de scripts e facilitar a interação com os usuários, pode-se utilizar caixas de diálogo que desenham janelas na tela similares as do modo gráfico, com botões, entradas para texto e menu; Essas caixas são utilizadas para compor interfaces amigáveis com o usuário, para que ele responda perguntas ou escolha opções;
Introdução O dialog é um executável e recebe todos os parâmetros via linha de comando, então ele geralmente é usado dentro de um script; Tarefas comuns feitas com o dialog são escolher uma opção em um menu, escolher um arquivo, uma data ou digitar frases ou senhas; Com o dialog é possível fazer shell scripts que se parecem com programas gráficos, onde o usuário vê apenas telas e navega entre elas apertando botões;
Caixa de diálogo As caixas de diálogo são chamadas por intermédio do comando dialog, que terá seu comportamento determinado por seus parâmetros; Por exemplo, o comando: dialog --msgbox 'Um texto simples de aviso.' 5 32
Caixa de diálogo O exemplo mostra uma janela como texto Um texto simples de aviso. de tamanho 5 linhas por 32 colunas no centro da tela, e um botão Aceitar ; Apesar de estar em modo texto, a interface interage com o mouse.
Caixa de diálogo Tipo msgbox yesno inputbox passwordbox infobox textbox calendar timebox radiolist checklist Descrição Mostra uma mensagem e um botão Aceitar Mostra uma pergunta para responder pelos botão Sim ou Não Solicita a digitação de um texto Solicita uma senha Mostra uma mensagem, sem botões Mostra o conteúdo de um arquivo Mostra um calendário para escolha de uma data Mostra um horário para escolha Mostra uma lista de opções para escolher uma Mostra uma lista de opções para escolha (múltiplas) menu Mostra um menu para escolha de um item gauge Mostra uma barra de progresso (porcentagem) tailbox Mostra a saída do comando tail -f fselect Digitar ou selecionar um arquivo
Caixa de diálogo Os parâmetros vão depender do tipo da caixa de diálogo, mas quatro deles são obrigatórios: dialog --tipo '<texto>' <altura> <largura>
Caixa de diálogo Onde: tipo? O tipo da caixa de diálogo; texto? Texto que aparece no início da caixa (borda superior); altura? Quantidade de linhas que serão utilizadas para desenhar a caixa; largura? Número de colunas que serão utilizadas para desenhar a caixa.
O tipo msgbox mostra uma mensagem ao usuário. Sua sintaxe é: dialog --msgbox '<texto>' <altura> <largura> Para mostrar a mensagem Programa finalizado com sucesso e título Parabéns, utiliza-se o comando: dialog --title 'Parabéns' --msgbox 'Programa finalizado com sucesso' 0 0
O tipo yesno mostra uma mensagem ao usuário e solicita que responda sim ou não. Sua sintaxe é: dialog --yesno '<texto>' <altura> <largura> Para perguntar Deseja continuar com título Atenção, utiliza-se o comando: dialog --title 'Atenção' --yesno 'Deseja continuar?' 0 0 Para saber a escolha do usuário deve-se utilizar a variável $?.
dialog --title 'Atenção' --yesno 'Deseja continuar?' 0 0 if [ $? = 0 ] then echo "Respondeu que sim." else echo "Respondeu que não." fi
O tipo inputbox mostra uma mensagem ao usuário e solicita que entre com um texto. Sua sintaxe é: dialog --inputbox '<texto>' <altura> <largura> Para escrever Entre com seu nome: e título Seu nome?, utiliza-se o comando: dialog --title 'Seu nome?' --inputbox 'Entre com seu nome:' 0 0 Para recuperar a saída do comando dentro de um script, pode-se utilizar a opção --stdout e fazer com que o retorno seja armazenado em uma variável.
nome=$(dialog --stdout --title 'Seu nome?' \ --inputbox 'Entre com seu nome:' 0 0) if [ $? = 0 ] then echo "O nome digitado foi $nome." else echo "Cancelou." fi
O tipo passwordbox é semelhante ao inputbox, porém não mostra o que está sendo digitado. Exemplo: nome=$(dialog --stdout --title 'Entre com sua senha:' \ --passwordbox '' 0 0) if [ $? = 0 ] then echo "A senha digitada foi $nome." else echo "Cancelou." fi
O tipo infobox simplesmente mostra uma mensagem e sai, permitindo que o script continue sua execução normalmente. Exemplo: tempo=8 while [ $tempo -ne 0 ] do dialog --title 'Tempo restante:' --infobox "Restam $tempo segundo(s)" 0 0 sleep 1 let tempo=$tempo-1 done
O tipo textbox exibe o conteúdo de um arquivo texto e apresenta o botão Sair. Para, por exemplo, exibir o conteúdo do arquivo /etc/passwd mostrando como título /etc/passwd, utiliza-se o comando: dialog --title '/etc/paswd' --textbox /etc/passwd 0 0
O tipo calendar mostra um calendário e solicita a escolha de uma data. Sua sintaxe é: dialog --calendar '<texto>' <altura> <largura> <dia> <mês> <ano> Para mostrar um calendário do mês de julho de 2011, tendo selecionado o dia 12 por padrão e mostrando o texto Selecione uma data., utilizar o comando: dialog --calendar 'Selecione uma data.' 0 0 12 7 2011
Para recuperar a saída do comando dentro de um script, pode-se utilizar a opção --stdout e fazer com que o retorno seja armazenado em uma variável. Exemplo: data=$(dialog --stdout --calendar 'Escolha uma data' 0 0 12 7 2010) if [ $? = 0 ] then echo "A data escolhida foi $data." else echo "A solicitacao foi cancelada." fi
O tipo radiolist mostra uma lista de opções onde somente uma pode ser selecionada. Sua sintaxe é: dialog --radiolist '<texto>' <altura> <largura> <tamanho_da_lista> <tag1> <item1> <status1>...
Para recuperar a saída do comando dentro de um script, pode-se utilizar a opção --stdout e fazer com que o retorno seja armazenado em uma variável. Exemplo:
cor=$(dialog --stdout --title 'Qual a cor?' \ --radiolist 'Selecione uma cor:' 0 0 0 \ Amarelo '' off \ Azul '' Off \ Rosa '' Off \ Verde '' On \ Vermelho '' Off) if [ $? = 0 ] then echo "A cor escolhida foi $cor." else echo "Cancelou." fi
O tipo checklist mostra uma lista de opções onde várias delas podem ser selecionadas simultaneamente. Sua sintaxe é: dialog --checklist '<texto>' <altura> <largura> <tamanho_da_lista> <tag1> <item1> <status1>...
selecao=$(dialog --stdout --title 'Compras' \ --checklist 'O que gostaria de levar?' 0 0 0 \ DVD 'Gravador de dvd' on \ Mouse 'Otico, sem fio' off \ Teclado 'ABNT 2' off \ Caixas 'Amplificadas' on) if [ $? = 0 ] then echo "A seleção foi $selecao." else echo "Cancelou." fi
O tipo menu mostra uma lista de opções onde somente uma pode ser selecionada. Seu funcionamento é bem semelhante ao tipo radiolist e sua sintaxe é: dialog --menu '<texto>' <altura> <largura> <tamanho_do_menu> <tag1> <item1>...
cor=$(dialog --stdout --title 'Qual a cor?' \ --menu 'Selecione uma cor:' 0 0 0 \ Amarelo 'Parece uma banana' \ Azul 'Da cor do ceu' \ Rosa 'Como a flor' \ Verde 'Natureza' \ Vermelho 'Bem forte' ) if [ $? = 0 ] then echo "A cor escolhida foi $cor." else echo "Cancelou." fi
O tipo fselect é utilizado para navegar por um sistema de arquivos e retornar um arquivo selecionado pelo usuário. Sua sintaxe é: dialog --fselect <arquivo_ou_diretório> <altura> <largura> Para mostrar o arquivo /teste/texto.txt com o título Selecionar, pode-se utilizar o comando: dialog --title 'Selecionar' --fselect /teste/texto.txt 0 0