Como reconhecer respostas SIM ou NÃO no Dialog
A forma mais básica de se comunicar com o usuário é fazendo perguntas que ele possa responder com Sim ou Não. É possível fazer um configurador, ou até mesmo um programinha simples com essas respostas. Já foi visto como fazer uma telinha desse tipo:
dialog --yesno 'sim ou não?' 0 0
Mas, e dentro de um script, como saber qual foi a resposta do usuário? Qual foi o botão que ele apertou?
O Dialog utiliza o código de retorno (“Return Code“) para informar qual foi o botão apertado. Como sabemos, o shell guarda esse código dentro da variável $?
.
Então que tal descobrirmos a solução do problema testando? Execute o seguinte comando duas vezes, e note qual o código de retorno que aparece quando se escolhe “Yes” e quando se escolhe “No”.
dialog --yesno 'sim ou não?' 0 0 ; echo Retorno: $?
Fácil! Zero para Sim, um para não.
Se lembrarmos que todos os comandos UNIX/Linux retornam zero em sucesso e qualquer coisa diferente de zero (geralmente 1) quando ocorre algum erro, fica fácil memorizar. O zero é sempre positivo, beleza, sem erro, SIM. O um é problema, erro, NÃO.
Memorizando: SIM=0, NÃO=1
Agora que sabemos isso, fica fácil lidar com as respostas do usuário. Basta usar o if
para testar o valor do $?
. Um exemplo bem simples:
dialog --yesno 'Quer ver as horas?' 0 0 if [ $? = 0 ]; then echo "Agora são: $( date )" else echo 'Ok, não vou mostrar as horas.' fi
Caso a mensagem do else
não seja necessária, podemos usar o operador &&
(AND) e deixar o comando bem mais simples:
dialog --yesno 'Quer ver as horas?' 0 0 && echo "Agora são: $(date)"
Usando o Dialog fica fácil definir variáveis de estado (“flags“) ou opções antes da execução de um programa! Por exemplo, um programa simples para listar arquivos do diretório atual:
#!/bin/sh # lsj.sh -- o script do "ls joiado" # DWS Analista de Sistemas # Zerando as opções cor= ; ocultos= ; subdir= ; detalhes= # Obtendo as configurações que o usuário deseja dialog --yesno 'Usar cores?' 0 0 && cor='--color=yes' dialog --yesno 'Mostrar arquivos ocultos?' 0 0 && ocultos='-a' dialog --yesno 'Incluir sub-diretórios?' 0 0 && subdir='-R' dialog --yesno 'Mostrar visão detalhada?' 0 0 && detalhes='-l' # Mostrando os arquivos ls $cor $ocultos $subdir $detalhes