Linux e Unix
Criando caixas de diálogo em Shell Scripting com dialog - Linux
O pacote dialog é uma ferramenta criada originalmente por Savio Lam. Este pacote permite criar caixas de diálogo padrão em janelas em um ambiente de texto, usando códigos de controle de escape ANSI.
Podemos incorporar estas caixas de diálogo em nossos script do shell para que haja interação com os usuários.
O pacote dialog não é instalado por padrão em muitas distribuições Linux. Se ele não estiver presente em seu sistema, instale-o com os comandos a seguir:
Em sistemas Debian / Ubuntu:
# apt-get install dialog
Em sistemas Red Hat / Fedora / CentOS:
# yum install dialog
O comando dialog utiliza parâmetros de linha de comando para determinar que tipo de widget de janela deve ser criada. Um widget é um tipo de elemento de janela. Podemos ver na tabela a seguir alguns dos tipos de widgets suportados pelo pacote dialog:
Widget | Descrição |
calendar | Fornece um calendário que permite selecionar datas |
checklist | Mostra entradas múltiplas onde cada entrada pode ser ligada ou desligada |
form | Permite construir um formulário com labels e campos de texto para serem preenchidos |
fselect | Fornece uma janela de seleção de arquivos |
gauge | Mostra uma barra de progresso |
infobox | Mostra uma mensagem sem esperar por uma resposta |
inputmenu | Fornece um menu editável |
menu | Mostra uma lista de seleções para escolha |
msgbox | Mostra uma mensagem e pede que o usuário pressione um botão OK |
passwordbox | Mostra uma caixa de texto simples que esconde o texto digitado |
radiolist | Fornece um grupo de itens de menu onde apenas um item pode ser selecionado |
tailbox | Mostra o texto de um arquivo em uma janela com rolagem usando o comando tail |
textbox | Mostra o conteúdo de um arquivo em uma janela com rolagem |
timebox | Fornece uma janela para selecionarmos uma hora, minuto e segundo |
yesno | Fornece uma mensagem simples com botões Yes e No. |
Para especificarmos um widget na linha de comandos, usamos a seguinte sintaxe:
dialog --widget parâmetros
Cada widget fornece saída em duas formas:
O código de status do comando dialog determina o botão selecionado pelo usuário. Caso o botão selecionado seja Yes ou OK, o status de saída retornado será 0; se um botão Cancel ou No for selecionado, o comando dialog retornará um status de saída igual a 1. E caso o usuário pressione a tecla ESC, o status de saída será igual a 255. Desta forma, podemos usar a variável padrão $? para determinar qual ação foi selecionada na caixa de diálogo.
Agora, caso o widget retorne dados, como uma palavra ou a seleção de um menu, o comando dialog enviará esses dados para STDERR. Assim podemos usar as técnicas de redirecionamento de saída para redirecionar os dados para STDOUT ou qualquer outro arquivo, como no exemplo abaixo:
$ dialog --inputbox “Digite seu nome:” 10 20 2>nome.txt
Este comando redireciona o texto digitado na caixa de texto para o arquivo nome.txt. Os números 10 20 indicam o tamanho da janela, sendo no caso 10 linhas por 20 colunas.
Vamos estudar agora exemplos de uso dos diversos widgets:
1. Caixa de mensagens - msgbox
Mostra uma mensagem simples em uma janela e espera o usuário pressiona um botão OK para desaparecer.
Sintaxe:
dialog --title título_caixa --msgbox texto_a_mostrar altura largura
Exemplo:
$ dialog --title “Caixa de Exemplo” --msgbox “Testando uma msgbox” 10 35
2. Widget yesno
O widget yesno permite que o usuário esponda a uma questão do tipo Sim / Não mostrada na tela. O status de saída do comando dialog depende de qual botão é escolhido. Se for o botão No, o status de saída será 1; se for o botão Yes, o status de saída será 0.
Exemplo:
$ dialog --title “Caixa yesno” --yesno “Escolha Sim ou Não” 10 25
3. A caixa inputbox
A caixa inputbox fornece uma caixa de texto simples para que o usuário entre com uma string qualquer. O comando dialog envia o valor do texto digitado para o STDERR. Podemos então redirecionar esse valor para obtermos a informação digitada, o que faremos com o parâmetro --stdout.
Exemplo:
$ nome=$(dialog --inputbox “Digite seu nome” 10 25 --stdout)
$ echo $?
$ echo $nome
4. O widget textbox
Com o widget textbox podemos mostrar uma grande quantidade de informações em uma janela. Ele produz uma janela com rolagem que contém o texto proveniente de um arquivo especificado.
Exemplo:
$ dialog --textbox /etc/group 20 20
5. O widget menu
O widget menu permite criar um menu de itens selecionáveis a partir de uma tag de seleção e um texto descritivo de cada item
Exemplo:
$ sistema=$(dialog --menu “Escolha o sistema” 20 35 15 \
1 “Linux” \
2 “BSD” \
3 “Solaris” \
4 “ Android” --stdout)
$ echo $sistema
No exemplo o caractere \ é utilizado para que possamos continuar a digitação do comando na linha abaixo. Capturamos o valor escolhido na variável sistema, e em seguida exibimos seu valor no console com o comando echo.
6. Widget calendar
Usamos o widget calendar para que o usuário possa selecionar uma data em uma janela gráfica.
Exemplo:
$ data=$(dialog --calendar “Escolha a data” 0 0 --stdout)
$ echo $data
Usamos a opção --stdout para redirecionar a informação selecionada para a saída padrão, onde será atribuída à variável data.
7. Trabalhando com caixa de informações - infobox:
O infobox é um widget bem simples, que vostra uma mensagem sem esperar por uma resposta do usuário.
Exemplo:
$ dialog --title “Sucesso” --infobox “Operação Concluída” 5 35; sleep 4; clear
Usamos o comando sleep 4 para que a janela permaneça por 4 segundos antes de encerrar o widget.
8. Usando um checklist
Um checklist permite apresentar um conjunto de itens dos quais o usuário pode selecionar quantos desejar usando a barra de espaços do teclado.
Exemplo:
$ itens=$(dialog --checklist “Escolha a cor:” 15 30 4 \
“Verde” “” OFF \
“Azul” “” OFF \
“Amarelo” “” ON \
“Preto” “” OFF --stdout)
$ echo $itens
Os itens pré-selecionados devem usar a palavra ON, e os não selecionados automaticamente usam a palavra OFF. Também devemos indicar o número de itens logo após as dimensões da janela (em nosso caso, 4 itens).
9. Usando um radiolist
O radiolist é similar ao checklist, com a diferença de que só é possível escolher um dos itens apresentados.
Exemplo:
$ itens=$(dialog --radiolist “Escolha a cor:” 15 30 4 \
“Verde” “” OFF \
“Azul” “” OFF \
“Amarelo” “” ON \
“Preto” “” OFF --stdout)
$ echo $itens
10. Usando um timebox
Vamos ver agora o uso básico de um widget timebox
Exemplo
$ hora=$(dialog --stdout --title “Relógio” --timebox “Escolha o horário:” 0 0)
$ echo “ A hora escolhida foi $hora”
É isso aí pessoal! Agora é só caprichar em seus scripts usando essa ferramenta excelente. E não deixem de conferir nosso artigo Criando caixas de diálogo via Shell Scripting usando a ferramenta whiptail.
loading...
-
Comando Sleep - Temporização Da Execução De Comandos No Linux
Comando sleepPodemos forçar a espera de um certo período de tempo entre a execução de comandos usando o comando sleep. É um comando muito útil em scripts, por exemplo, nós quais temos tarefas que devem ser executadas após um certo tempo especificado....
-
Yast - Ferramenta De Configuração Dos Sistemas Opensuse E Sles
Vamos abordar hoje um recurso extremamente interessante encontrado nos sistemas SUSE SLES e openSUSE para gerenciamento do sistema: o pacote YaST.O YaST é uma ferramenta de configuração de sistemas que pode ser utilizado a partir de uma interface...
-
Criando Funções Em Shell Scripting - Linux
Conforme começamos a criar scripts do shell mais complexos, acabaremos invariavelmente reusando partes do código que realizam tarefas específicas. Algumas vezes são tarefas simples, como exibir uma mensagem para o usuário, e outras vezes serão...
-
Vector Linux - Apresentação E Instalação
Hoje iremos instalar e testar a distribuição Vector Linux, uma distro muito interessante baseada em Slackware.Essa distribuição é desenvolvida no Canadá, e possui versões para arquiteturas de 32 e 64 bits, sendo recomendada para uso em desktops...
-
Comparando Arquivos No Linux / Unix
Comando cmpCompara o conteúdo de dois arquivos e envia o resultado para a saída padrão.Usa-se o comando cmp para arquivos que não são de texto para verificar se são idênticos. Para comparar arquivos de texto, use o comando diff.Se os arquivos...
Linux e Unix