Shell Scripting – Criando caixas de diálogo TUI com whiptail no Linux – 27
Criando caixas de diálogo com whiptail no Linux
O whiptail é um programa que nos permite exibir diversos tipos de caixas de diálogo com questões ou mensagens aos usuários a partir de um script do shell. O whiptail utiliza a biblioteca de programação newt, a qual é escrita em linguagem C.
Usaremos um arquivo de script chamado caixas.sh para nossos testes. Crie-o com o editor vi (ou outro de sua preferência) e não se esqueça de dar permissão de execução após terminar de editá-lo e salvá-lo:
# chmod 755 caixas.sh
Exemplos:
#!/bin/bash whiptail --title "Caixa de Mensagem de Teste" --msgbox "Criando uma caixa de mensagem usando o whiptail. Escolha OK para continuar." --fb 10 50
A opção –fb permite o uso de botões completos (por padrão, o whiptail usa uma versão simplificada dos botões). Testando:
# ./caixas.sh
Exemplo:
#!/bin/bash if whiptail --title "Testando a caixa Yes/No" --yesno "Escolha entre as alternativas Yes e No." 10 50 then echo "Você escolheu Yes. O status de saída é $?." else echo "Você escolheu No. O status de saída é $?." fi
#!/bin/bash { for ((i=0 ; i<=70 ; i+=10)); do whiptail --title “Caixa de Teste” --msgbox “Testando o tamanho da caixa de texto. A largura atual é $i. Pressione OK para prosseguir.” 20 $1 done }
4. Exibindo o conteúdo de um arquivo dentro de uma caixa do tipo textbox, com rolagem de tela (scroll):
Exemplo:
#!/bin/bash whiptail --title “Caixa textbox” --textbox /etc/passwd 20 65 --scrolltext
Exemplo:
#!/bin/bash if whiptail --title "Escolhendo o tipo de instalação" --yes-button "Completa" --no-button "Personalizada" --yesno "Escolha o tipo de instalação desejada" --fb 10 50 then echo "Você escolheu a instalação Completa." else echo "Você escolheu a instalação Personalizada." fi
Exemplo:
#!/bin/bash nome=$(whiptail --title "Entrada de nome do usuário" --inputbox "Digite seu nome:" --fb 10 60 3>&1 1>&2 2>&3) statussaida=$? if [ $statussaida = 0 ]; then echo "O nome digitado foi: $nome" else echo "Entrada cancelada pelo usuário." fi
#!/bin/bash senha=$(whiptail --title "Caixa de Senha" --passwordbox "Digite sua senha e escolha OK para continuar." --fb 10 50 3>&1 1>&2 2>&3) status=$? if [ $status = 0 ]; then echo "A senha digitada foi: $senha" else echo "Entrada cancelada." fi
Exemplo:
#!/bin/bash item=$(whiptail --title "Abrindo aplicativos" --menu "Escolha uma opção na lista abaixo" --fb 15 50 4 \ "1" "Calculadora" \ "2" "Efetuar Backup" \ "3" "Navegar na Internet" \ "4" "Enviar email" 3>&1 1>&2 2>&3) status=$? if [ $status = 0 ]; then echo "Você escolheu a opção:" $item else echo "Opção cancelada." fi
#!/bin/bash cidade=$(whiptail --title "Listagem de Cidades" --radiolist \ "Qual cidade deseja visitar?" 15 50 5 \ "Londres" "Inglaterra" ON \ "Berlim" "Alemanha" OFF \ "Toronto" "Canadá" OFF \ "Abu Dhabi" "Emirados Árabes" OFF \ "Pequim" "China" OFF 3>&1 1>&2 2>&3) status=$? if [ $status = 0 ] then echo "A cidade escolhida foi:" $cidade else echo "Você não escolheu nenhuma cidade." fi
#!/bin/bash cidade=$(whiptail --title "Listagem de Cidades" --checklist --fb \ "Quais cidades deseja visitar?" 15 50 5 \ "Londres" "Inglaterra" ON \ "Berlim" "Alemanha" OFF \ "Toronto" "Canadá" OFF \ "Abu Dhabi" "Emirados Árabes" OFF \ "Pequim" "China" OFF 3>&1 1>&2 2>&3) status=$? if [ $status = 0 ] then echo "As cidades escolhidas foram: " $cidade else echo "Você não escolheu nenhuma cidade." fi
#!/bin/bash pais=$(whiptail --title "Listagem de Países" --radiolist --fb \ "Qual país deseja visitar?" 15 50 5 \ "1" "Inglaterra" ON \ "2" "Alemanha" OFF 3>&1 1>&2 2>&3) status=$? if [ $status = 0 ] then if [ $pais = 1 ] then cidade=$(whiptail --title "Cidades na inglaterra" --radiolist --fb \ "Escolha a cidade na Inglaterra:" 15 50 5 \ "Londres" "" ON \ "Essex" "" OFF \ "Liverpool" "" OFF 3>&1 1>&2 2>&3) status=$? if [ $status = 0 ] then echo “A cidade escolhida foi: “ &cidade else echo “Opção cancelada pelo usuário” fi else cidade=$(whiptail --title "Cidades na Alemanha" --radiolist --fb \ "Escolha a cidade na Alemanha:" 15 50 5 \ "Berlim" "" ON \ "Frankfurt" "" OFF \ "Dresden" "" OFF 3>&1 1>&2 2>&3) status=$? if [ $status = 0 ] then echo “A cidade escolhida foi: “ &cidade else echo “Opção cancelada pelo usuário” fi fi else “Nenhum país selecionado. Entrada cancelada” fi
Assista também ao vídeo da Bóson Treinamentos que fala sobre whiptail:
Em nosso próximo artigo sobre Shell Scripting, aprenderemos a criar as caixas de diálogo usando uma outra ferramenta muito versátil, chamada de dialog, que utiliza a biblioteca ncurses.
Boa tarde professor,
Você pode me explicar por gentileza como funcionada estas FD (Descritores de arquivos).
echo 1234567890 > arquivo
exec 3 arquivo
read -n 4 &3
exec 3>&-
cat arquivo
Não entendi porque em alguns casos específicos eles são utilizados. Se já existem os convencionais que suprem a maioria das necessidades. (>, >>, <, <,&>, |)
Em um dos seus vídeos também ví aqui estes registradores:
#!/bin/bash
nome=$(whiptail –title “Entrada de nome do usuário” –inputbox “Digite seu nome:” –fb 10 60 3>&1 1>&2 2>&3)
statussaida=$?
if [ $statussaida = 0 ]; then
echo “O nome digitado foi: $nome”
else
echo “Entrada cancelada pelo usuário.”
fi
Agradeço se puderem me ajudar.
Abraço.