Programando em Shell Script para iniciantes
Este é meu primeiro artigo, mas estudei bastante para fazê-lo. Ele foi desenvolvido principalmente para aqueles que querem começar nesse mundo fascinante da programação. Estudaremos os princípios do Shell Script e iremos até os diálogos gráficos.
Parte 3: Dialog
Agora iremos implementar nossos scripts com diálogos gráficos, deixando-os mais amigáveis.
Existem inúmeros diálogos, mas nesta ocasião trataremos apenas de três: "Dialog", "Kdialog" e "Zenity".
Dialog:
Esse diálogo é amplamente usado em scripts do Slackware, inclusive na instalação do sistema. Portanto é um poderoso diálogo que pode ser usado com criatividade.
Instalação:
Se você usa uma distribuição baseada no Debian basta digitar "sudo apt-get install dialog" no terminal.
Se você usa outra distribuição ou deseja instalar pelo fonte, baixe o dialog aqui.
Vá a um terminal, entre no diretório onde o "dialog" foi baixado e digite em seqüência:
$ tar -zxvf dialog.tar.gz
$ cd dialog-1.1-20070930
$ ./configure
$ make
# make install
Chega de conversa e vamos praticar.
Entendendo o que você escreveu:
Entendendo o que você fez:
Existem inúmeros diálogos, mas nesta ocasião trataremos apenas de três: "Dialog", "Kdialog" e "Zenity".
Dialog:
Esse diálogo é amplamente usado em scripts do Slackware, inclusive na instalação do sistema. Portanto é um poderoso diálogo que pode ser usado com criatividade.
Instalação:
Se você usa uma distribuição baseada no Debian basta digitar "sudo apt-get install dialog" no terminal.
Se você usa outra distribuição ou deseja instalar pelo fonte, baixe o dialog aqui.
Vá a um terminal, entre no diretório onde o "dialog" foi baixado e digite em seqüência:
$ tar -zxvf dialog.tar.gz
$ cd dialog-1.1-20070930
$ ./configure
$ make
# make install
Chega de conversa e vamos praticar.
#!/bin/sh
dialog --inputbox "Digite o caminho de onde você deseja criar o diretório." 10 60 2> /tmp/caminho.tmp
caminho=`cat /tmp/caminho.tmp`
dialog --inputbox "Digite o nome do diretório que deseja criar." 10 50 2> /tmp/diretorio.tmp
diretorio=`cat /tmp/diretorio.tmp`
if [ -e $caminho ]; then
mkdir -p "$caminho/$diretorio"
dialog --msgbox "O diretório $diretorio foi criado." 5 60
else
dialog --msgbox "Entre com um diretório válido." 5 60
fi
dialog --inputbox "Digite o caminho de onde você deseja criar o diretório." 10 60 2> /tmp/caminho.tmp
caminho=`cat /tmp/caminho.tmp`
dialog --inputbox "Digite o nome do diretório que deseja criar." 10 50 2> /tmp/diretorio.tmp
diretorio=`cat /tmp/diretorio.tmp`
if [ -e $caminho ]; then
mkdir -p "$caminho/$diretorio"
dialog --msgbox "O diretório $diretorio foi criado." 5 60
else
dialog --msgbox "Entre com um diretório válido." 5 60
fi
Entendendo o que você escreveu:
- dialog : abre um diálogo;
- --inputbox : tipo de diálogo. Esse tipo de diálogo permite que o shell pare de executar e espere por uma resposta. A frente "--inputbox" podemos observar entre aspas um texto, esse é texto irá aparecer no diálogo. A frente do texto observamos que existem dois números o primeiro representa a altura e o segundo a largura da caixa de diálogo;
- 2> /tmp/caminho.tmp : captura a expressão que foi deixada pela caixa de dialogo e escreve a expressão no arquivo "caminho.tmp" que foi criado no diretório "/tmp";
- -e : se existir a variável;
- caminho : é o nome que foi dado a variável que foi capturada e escrita no arquivo "/tmp/caminho.tmp";
- =`cat /tmp/caminho.tmp` : o igual diz ao shell que variável "caminho" deverá ser igual ao comando "cat /tmp/caminho.tmp". O comando "cat" irá ler o que está escrito no arquivo "/tmp/caminho.tmp". Se você não percebeu, o comando "cat /tmp/caminho.tmp" está entre duas crases, as crases representa que há entre elas um comando e que ele não deve ser ignorado.
- "--calendar" que mostra um calendário e escolhe uma data;
- "--checklist" que mostra uma lista de opções e dá possibilidade de escolher várias opções;
- "--fselect" que mostra a opção para mostrar um arquivo ou digitar a localização;
- "--gauge" que mostra uma barra de progresso expressa em porcentagem;
- "--infobox" que mostra uma mensagem mas não possui botões;
- "--menu" que é semelhante ao "--checklist", mas só pode selecionar uma opção;
- "--msgbox" que é semelhante ao "--infobox", mas possui o botão "ok"
- "--passwordbox" que é semelhante ao "--inputbox", mas camufla os caracteres. É usado para digitar senhas;
- "--radiolist" que tem a mesma função do "--menu" e também só dá direito de escolher uma das opções;
- "--textbox" que mostra o conteúdo de um arquivo;
- "--timebox" que é semelhante ao "--calendar", mas ao invés de data você escolhe o horário;
- "--yesno" que mostra uma pergunta e tem como resposta "sim" ou "não", sendo que essa resposta é armazenada como variável, se escolher a opção "sim" o valor que a variável assume é "0" e para a opção "não" o valor assumido é "1".
#!/bin/sh
dialog --yesno "Deseja desligar o computador agora?" 5 50
if [ $? = "0" ]; then
sudo shutdown -r now
else
dialog --msgbox "Você cancelou a operação!" 10 30
fi
dialog --yesno "Deseja desligar o computador agora?" 5 50
if [ $? = "0" ]; then
sudo shutdown -r now
else
dialog --msgbox "Você cancelou a operação!" 10 30
fi
Entendendo o que você fez:
- --yesno : explicado anteriormente;
- $? : variável que retoma o ultimo comando executado. Neste caso e retoma: "dialog --yesno "Deseja desligar o computador agora?" 5 50" e se for igual a "0" realiza os comandos seguintes.