O Kdialog oferece uma quantidade generosa de opções de caixas de diálogo. Além do –msgbox, temos também o “--sorry" e “--error“, que podem ser usados de acordo com o contexto da mensagem, como em:
Outra opção útil é o “--passivepopup“, que exibe uma caixa num dos cantos da tela que desaparece sozinha depois de um tempo determinado (ou ao ser clicada), ideal para avisos de rotina sem tanta importância. Ao usar o passivepopup, além do texto da mensagem, você deve especificar o tempo de exibição da mensagem, em segundos. Para que o script continue depois de exibir a janela, sem esperar ela desaparecer, acrescente um “&”, como em:
A opção “--yesno” permite fazer perguntas. A resposta é armazenada na variável “$?“. Se a resposta for “sim”, ela assume o valor 0, caso seja “não”, ela armazena o valor 1. Se por acaso a janela for de alguma forma fechada, sem uma resposta (ao matá-la usando o xkill, por exemplo), a variável também fica com o valor 1:
Como temos apenas duas possibilidades, você pode usar um if para especificar o que o script deve fazer em cada caso:
resposta=$?
if [ "$resposta" = "0" ]; then
apt-get upgrade
fi
if [ "$resposta" = "1" ]; then
kdialog --msgbox "Ok, abortando..."
fi
Aqui usei dois “if”, um para o sim e outro para o não. Você pode economizar algumas linhas usando um “else” (senão):
resposta=$?
if [ "$resposta" = "0" ]; then
apt-get upgrade
else
kdialog --msgbox "Ok, abortando..."
fi
O else deve ser usado com um pouco mais de cuidado, pois ele se aplica a qualquer caso onde a resposta for diferente de 0 e não apenas no caso de ela ser 1, como ao usar um segundo if. Em algumas situações isso pode abrir margem para acidentes, caso seu script seja usado num contexto diferente do que ele foi projetado.
Existe uma pequena variação do –yesno que é a opção “--warningcontinuecancel“, onde a legenda dos botões muda para continuar/cancelar, mas sem alterar o comportamento da janela.
Outra variação é a opção “--yesnocancel” que mostra uma caixa com três opções. Respondendo “Sim” ou “Não”, a variável “$?” assume o valor “0” ou “1”, mas respondendo “Cancelar” ela assume o valor “2”.
A opção “Cancelar” pode ser usada para fechar o script, através do comando “exit“, que encerra a execução, sem processar o resto dos comandos. Isto pode ser útil num script longo, com muitos passos.
É importante que nestes casos você encontre uma forma de desfazer as alterações feitas nas opções anteriores, deixando tudo como estava antes de executar o script. Uma boa medida nestes casos é armazenar todas as respostas em variáveis e deixar para fazer todas as operações de uma vez, no final do script.
Como agora temos três possibilidades de resposta, podemos utilizar a função “case“, que permite especificar ações para um número indefinido de opções.
kdialog --yesnocancel "Sua conexão é muito lenta! A atualização do sistema vai demorar duas semanas. Quer continuar mesmo assim? :-P" resposta=$? case$respostain0) apt-get upgrade ;;1) kdialog --msgbox "Ok, abortando..." ;;2) exit 0 ;; *) kdialog -- msgbox "Ops, isto não deveria acontecer... :-)" ;; esac
Depois do “case $resposta in“, você adiciona cada uma das possibilidades de valor para a variável, seguida de um parênteses. No final de cada linha vai obrigatoriamente um ponto-e-vírgula duplo, que faz o bash entender que deve passar para a próxima opção. Se precisar colocar vários comandos dentro de uma mesma opção, você pode separá-los por um único ponto-e-vírgula como em:
O “*)” funciona da mesma forma que o else, uma opção “default” que é executada se nenhuma das outras for válida. No meu exemplo, a resposta vem de uma janela com apenas três opções, numeradas de 0) a 2). Ou seja, a menos que algo de muito estranho aconteça, a opção default (*) nunca será usada.
Lembre-se de que os comandos “if” e “case” devem ser sempre fechados, respectivamente pelo “fi” e pelo “esac”, indicando onde a condicional termina.
O kdialog oferece três opções de diálogos para abrir, salvar arquivos e selecionar pastas. Vimos uma delas no script gravar-tv, o "--getsavefilename“. As outras duas opções são o “--getopenfilename” (para selecionar um arquivo a ser aberto) e o “--getexistingdirectory” (para selecionar um diretório).
As três opções são semelhantes no sentido de que permitem escolher um arquivo ou diretório; muda basicamente a forma como o diálogo é apresentado na tela.
A sintaxe é um pouco diferente da das caixas de diálogo. Você pode especificar uma pasta padrão e também um filtro, com os formatos de arquivos que serão mostrados. O diálogo pode mostrar apenas arquivos de imagem e salvar com a extensão .png, por exemplo.
Um diálogo simples seria:
“*.txt |Arquivos de texto”`
A variável “$arquivo” é criada com o nome escolhido, como “/home/kurumin/Desktop/teste.txt”. O diálogo não vai reclamar caso você tente salvar o arquivo num diretório onde o usuário de sistema atualmente em uso não tem permissão de escrita. É preciso que o próprio script verifique isso na hora de realmente criar ou modificar o arquivo, caso necessário.
Uma forma de fazer isso seria usar um if com a opção “-w”, que verifica se o usuário atual possui permissão de escrita no arquivo:
if [ -w "$arquivo" ]; then
echo "ok."
else
kdialog --msgbox "Você não tem permissão de escrita para o arquivo escolhido."
fi
O “*.txt |Arquivos de texto” permite especificar os formatos de arquivo que serão mostrados na janela, e a legenda do filtro. Para mostrar apenas arquivos de imagem, deixando a extensão .png como padrão, você poderia utilizar algo como “*.png *.jpg *.gif *bmp |Arquivos de Imagem”. Como vê, você só precisa citar as extensões de arquivo permitidas, separadas por espaço e incluir a legenda depois do “|”.
A opção --getexistingdirectory é mais simples, você só precisa especificar um diretório padrão, como em:
Como no exemplo anterior, a variável “$pasta” será criada armazenando o diretório escolhido.
Existem ainda três opções diferentes de menus de seleção, criados usando as opções: “--menu", "--checklist” e “--combobox“.
Na opção “--menu” é mostrado um menu com as opções, onde você só pode escolher uma, como em:
a “Redimensionar a imagem” \
b “Girar a imagem” \
c “Deletar a imagem” \
d “Converter para outro formato”`
A variável “$operacao” assume um dos 4 valores possíveis, a, b, c ou d. Você pode usar um case para especificar os comandos referentes a cada uma das opções, como neste script de exemplo:
|Arquivos de Imagem”`
a “Redimensionar a imagem” \
b “Girar a imagem” \
c “Deletar a imagem” \
d “Converter para outro formato”`
$operacao ina) mv $imagem $imagem-OLD;tamanho=`kdialog –inputbox “Redimensionar para qual tamanho?” “640×480″`;
convert -size $tamanho “$imagem”-OLD $imagem ;;
b) jpegorient +90 $imagem ;;c) rm -f $imagem ;;d) formato=`kdialog –inputbox “Converter a imagem para qual formato?” “.jpg”`;
convert $imagem “`echo $imagem | perl -pe ‘s/\.[^.]+$//’`$formato” ;;
*) kdialog — msgbox “Cancelado” ;;
esac
Este script usa um pouco de cada coisa que já aprendemos, junto com algumas funções novas. O convert permite realizar várias operações com imagens via linha de comando, ideal para uso em scripts. Ele possui muitas opções, que você pode ver no manual (man convert). O convert, junto com o jpegorient (que permite girar imagens) e outros comandos de manipulação de imagem fazem parte do pacote “imagemagick”.
Na opção d usei uma função em perl, que copiei do script de um dos servicemenus do Konqueror, que você pode encontrar no arquivo /usr/share/apps/konqueror/servicemenus/imageconverter.desktop.
Tenha em mente que a melhor fonte de aprendizado e pesquisa para desenvolver scripts são justamente outros scripts.
A opção --combobox é similar, mas as opções são mostradas dentro de uma caixa de seleção. A sintaxe também muda. Ao invés de especificar as opções, a, b, c, d. etc., você pode especificar diretamente as opções desejadas:
“deletar” “converter”`
A terceira opção, --checklist permite que seja escolhida mais de uma opção, ideal para fornecer um menu de alternativas que não conflitam entre si e podem ser escolhidas simultaneamente:
A variável “$fazer” vai armazenar uma linha contendo todas as opções selecionadas. Marcando as opções 2 e 3 como no screenshot, ela assume o valor: “2” “3”
Um último exemplo, também útil, é a opção --textbox, que exibe arquivos de texto. Ela é diferente de abrir o arquivo dentro do kedit, por exemplo, pois não permite editar, apenas ler. Serve como um “extrato para simples conferência”, útil para exibir arquivos de log, por exemplo.
Você pode usá-lo também para exibir a saída de comandos de modo texto, como o “ifconfig”, que mostra as configurações da rede. Diferente das outras opções do kdialog, ao usar o “–textbox” você deve especificar também as dimensões da janela, em pixels. Veja um exemplo:
kdialog –textbox /tmp/ifconfig.txt 500 320









