O documento descreve um minicurso sobre desenvolvimento de aplicações em Shell Script com interface gráfica interativa utilizando a ferramenta Dialog. O minicurso aborda conceitos básicos de Shell Script e Dialog, além de apresentar exemplos práticos de uso da Dialog para construção de interfaces gráficas em Shell Script.
2. Apresentadores
Igor Rafael da Rocha
Luís Eduardo Tenório da Silva
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
2
3. Roteiro
•Introdução
•Shell Script
▫Primeiro Programa
▫SheBang!
▫Comando echo
▫Variáveis
▫Comentários
▫Parâmetros Posicionais
▫Status de Términio
▫Estrutura de condição
▫Estrutura de repetição
▫Funções
▫Redirecionadores
▫Arrays
▫Pipes
▫Processamento de texto
▫Dicas
•Dialog;
▫Introdução
▫Tipos de caixa
▫ Funcionamento do dialog
•Uso do Dialog;
▫Exemplos
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
3
4. Roteiro
•Introdução
•Shell Script
▫Primeiro Programa
▫SheBang!
▫Comando echo
▫Variáveis
▫Comentários
▫Parâmetros Posicionais
▫Status de Términio
▫Estrutura de condição
▫Estrutura de repetição
▫Funções
▫Redirecionadores
▫Arrays
▫Pipes
▫Processamento de texto
▫Dicas
•Dialog;
▫Introdução
▫Tipos de caixa
▫ Funcionamento do dialog
•Uso do Dialog;
▫Exemplos
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
4
5. Introdução
O que é shell?
•Programa que permite ao usuário interagir com o Sistema Operacional(SO) através de comandos digitados do teclado.
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
5
6. Introdução
Tipos de shell
•bash (Bourne Again Shell)
•sh (Bourne Shell)
•ksh (Korn Shell)
•csh (C Shell)
•zsh (Z shell)
•Como saber o shell que estou utilizando?
▫echo $SHELL
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
6
7. Introdução
O que é shell script?
“ Linguagem de script usada em vários sistemas operacionais, com diferentes dialetos, dependendo do interpretador de comandos utilizado(shell).” Wikipédia
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
7
8. Roteiro
•Introdução
•Shell Script
▫Primeiro Programa
▫SheBang!
▫Comando echo
▫Variáveis
▫Comentários
▫Parâmetros Posicionais
▫Status de Términio
▫Estrutura de condição
▫Estrutura de repetição
▫Funções
▫Redirecionadores
▫Arrays
▫Pipes
▫Processamento de texto
▫Dicas
•Dialog;
▫Introdução
▫Tipos de caixa
▫ Funcionamento do dialog
•Uso do Dialog;
▫Exemplos
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
8
9. Shell Script
Primeiro Programa
#!/bin/bash
echo -e “Hello World!”
•Terminal:
▫chmod +x hello.sh
▫./hello.sh
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
9
10. Shell Script
SheBang
•Refere-se aos caracteres #!, quando os mesmos são os primeiros caracteres em um arquivo. Utilizado para identificar o tipo de interpretador que será utilizado no programa.
•Ex:
▫#!/bin/bash
▫#!/bin/sh
▫#!/bin/perl
▫#!/bin/python
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
10
11. Shell Script
Comando echo
•Imprime texto na saída do shell
• -e: interpreta caracteres de escape
•Obs:
▫“” –Interpreta variáveis (aspas duplas)
▫„‟ – Não interpreta variáveis (aspas simples)
▫`` - Interpreta comandos (crases)
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
11
13. Shell Script
Variáveis especiais
•$0- Nome do script em execução
•$1-$9- Parâmetros posicionais
•${10} ...- Parâmetros posicionais
•$#- Número de parâmetros passados
•$$- PID
•$?- Valor de retorno
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
13
14. Shell Script
Tipos de Variáveis
•Em shell-script as variáveis não são tipadas, mas podemos limitar a atribuição de tipos a variáveis com o comando declare
•Sintaxe:
▫declare <OPTION(S)> <VARIABLE>=<value>
•Options:
▫-a : Array
▫-f : Função
▫-i : Inteiro
▫-r : Somente leitura (constante)
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
14
15. Shell Script
Comando read
•Recebe entrada do usuário e guarda em uma variável
•Sintaxe
▫read VARIABLE
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
15
16. Shell Script
Comentários
•Linhas que serão ignoradas pelo interpretador. Utilizado para descrever a lógica ou algum comando utilizado.
•Sintaxe:
▫#
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
16
17. Shell Script
Parâmetros Posicionais
•Argumentos que são passados na linha de comando quando invocado um script.
•Sintaxe:
▫$1...$9
▫${10} ….
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
17
18. Shell Script
Status de Término (exit)
•Todo script ao ser executado retorna um valor que identifica o status do mesmo. Retorna um valor entre 0 e 255.
•Sintaxe:
▫exit <NUMBER>
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
18
19. Shell Script
Status de Término (exit)
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
19
Exit Code Number
Significado
0
Script executado com sucesso
1
Erros Gerais
2
Uso indevíduo do shell
126
Comando não pode ser executado
127
Comando não encontrado
128
Argumento inválido para exit
128 +n
Erro Fatal +sinal “n”
130
Finalizado com Ctrl +c
255*
Fora do intervalo
23. Shell Script
Tabela de opções
•Comparativos de números:
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
23
Operação
Significado
$a -lt $b
Menor que (less than)
$a -le $b
Menor ou igual (less or equal)
$a -gt $b
Maior que (greater than)
$a -ge $b
Maior ou igual (greater or equal)
$a -eq $b
Igual (equal)
24. Shell Script
Tabela de opções
•Comparativos de strings:
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
24
Operação
Significado
[ -z STRING ]
Verifica se string possui comprimento zero
[ -n STRING] ou [ STRING ]
Verifica se string não possui comprimento zero
[ STRING1 == STRING2 ]
Verifica se strings são iguais
[ STRING1 != STRING2 ]
Verifica se strings são diferentes
[ STRING1 < STRING2 ]
Verifica se STRING1 é menor que STRING2
[ STRING1 > STRING2 ]
Verifica se STRING1 é maior que STRING2
25. Shell Script
Tabela de opções
•Expressões:
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
25
Operação
Significado
[ !EXPR ]
Negação do valor da expressão ( verdade se EXPR falso)
[ (EXPR) ]
Precedência
[ EXPR1 -a EXPR2 ] ou [ EXPR1 && EXPR2 ]
Tabela and
[ EXPR1 -o EXPR2 ] ou [ EXPR1 || EXPR2 ]
Tabela or
26. Shell Script
Tabela de opções
•Operações com arquivos :
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
26
Operação
Significado
[ -e ARQ ]
Verdadeiro se ARQ existe.
[ -d ARQ ]
Verdadeiro se ARQ existe e se é diretório.
[ -r ARQ ]
Verdadeiro se ARQ existe e se é legível.
[ -w ARQ ]
Verdadeiro se ARQ existe e se tem permissão de escrita.
[ -x ARQ ]
Verdadeiro se ARQ existe e se é executável
[ -z ARQ ]
Verdadeiro se ARQ estiver vazio
27. Shell Script
Case
•Sintaxe:
case "$variable" in "$condition1" ) command... ;; "$condition2" ) command... ;; *) command... ;; esac
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
27
29. Shell Script
For
•Sintaxe:
for (( c=1; c<=5; c++ )); do
command
done
•Sintaxe 2
for VARIABLE in VALUE_LIST; do
command
done
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
29
30. Shell Script
For
•Sintaxe:
while [ condition ];do command(s)...
done
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
30
31. Shell Script
Funções
•Sub-rotinas (bloco de código) que implementa um conjunto de operações e executa uma tarefa específica.
•Sintaxe:
function_name () { command...
}
•Chamada:
function_name
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
31
32. Shell Script
Funções
•Devem ser declaradas antes de suas chamadas
•Não podem estarem vazias
•Podem ser criadas dentro de outras funções (embora inútil)
•Podem ser declaradas com “nomes estranhos” ( _ , : , %)
•Uma mesma função pode ser definida varias vezes, porém a ultima versão é a que é invocada
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
32
33. Shell Script
Funções
•Como passar argumentos para funções?
R:Utilizando parâmetros posicionais.
•Como retornar valores?
R: três formas
▫exit n (apenas inteiros)
▫return n (apenas inteiros)
▫echo “n” (strings)
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
33
36. Shell Script
Redirecionadores
•> - redireciona saída padrão para um arquivo, removendo-o caso exista.
•>>- redireciona saída padrão para um arquivo, adicionando-a no final do arquivo.
•< - redireciona a entrada padrão para um arquivo
•2>- redireciona saída de erro padrão para um arquivo, removendo-o caso exista.
•2>> - redireciona saída de erro padrão para um arquivo, adicionando-a no final do arquivo.
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
36
39. Shell Script
Arrays
•Acesso
▫${name[1]}
•Retornar todos os elementos do array
▫${vetor[@]}
▫${vetor[*]}
•Tamanho do array
▫${#vetor[@]}
▫${#vetor[*]}
•Adicionando itens
▫vetor=(${vetor[@]} "$elem")
▫vetor=(${vetor[*]} "$elem")
•Removendo itens
▫unset vetor[1]
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
39
40. Shell Script
Pipes
•Forma de comunicação interprocessos onde a saída de um comando serve de entrada para outro comando
•Sintaxe:
▫Command1 | Command2
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
40
42. Shell Script
Processamento de texto(sed)
•Editor de fluxo (Stream editor)
•Muito utilizado em sistemas Unix
•Trabalha com o conceito de expressões regulares
•Sintaxe:
▫sed „commad‟ file(s)
•Alguns comandos
▫s/TEXT1/TEXT2/ -substitui TEXT1 por TEXT2
▫/d – deleta linhas ou entradas
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
42
43. Shell Script
Processamento de texto(awk)
•Linguagem de programação para processamento de dados baseados em texto
•Sintaxe:
▫awk „pattern{action}‟ file(s)
•Alguns comandos
▫{print $1} – Imprime o primeiro campo
▫{print $1”t”$3} - Imprime o primeiro e terceiro campo separando-os com uma tabulação
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
43
44. Shell Script
Processamento de texto(grep)
•aplicativo que faz buscas procurando linhas que respeitem a expressão regular mencionada.
•Sintaxe:
▫grep [OPTIONS] PATTERN [FILE...]
•Exemplos
▫qrep aluno /etc/passwd – mostra todas as linhas que contem a palavra aluno no arquivo /etc/passwd
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
44
45. Shell Script
Algumas Dicas
•Utilize comentários
•Evitar o uso de números mágicos
•Nomes descritivos para variáveis e funções
•Utilize exit de forma sistemática e significativa
•Quebrar scripts complexos em partes mais simples(utilizando funções)
•Evite redundâncias
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
45
46. Roteiro
•Introdução
•Shell Script
▫Primeiro Programa
▫SheBang!
▫Comando echo
▫Variáveis
▫Comentários
▫Parâmetros Posicionais
▫Status de Términio
▫Estrutura de condição
▫Estrutura de repetição
▫Funções
▫Redirecionadores
▫Arrays
▫Pipes
▫Processamento de texto
▫Dicas
•Dialog;
▫Introdução
▫Tipos de caixa
▫ Funcionamento do dialog
•Uso do Dialog;
▫Exemplos
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
46
47. Dialog
Introdução
•O que é o Dialog
“O Dialog é um programa para console (modo texto) que desenha caixas de diálogo na tela, similares as do modo gráfico, com botões, entradas para texto e menu” AURELIO, M. J.
▫Parâmetros via linha de comando;
▫Interatividade = usuário precisa operar durante a execução;
▫Semelhança com programas gráficos;
▫Útil para logins registros ;
▫Prático para iniciantes ;
▫Várias versões até a atual ;
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
47
48. Dialog
Tipos de caixa
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
48
50. Dialog
Checklist
dialog
--title 'Seleção dos Componentes'
--checklist 'O que você quer instalar?' 0 0 0
syntax 'Arquivos de sintaxe' on mouse 'Suporte a mouse' off
color 'Suporte a cores' on
beep 'Driver avançado de som' off
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
50
57. Dialog
Radiolist
dialog
--title 'Pergunta'
--radiolist 'Há quanto tempo você usa o Vi?'
0 0 0
iniciante 'até 1 ano' on
experiente 'mais de 1 ano' off guru 'mais de 3 anos' off
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
57
58. Dialog
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
58
Tailbox, Tailboxbg
dialog
--title 'Monitorando Mensagens do Sistema'
--tailbox out
0 0
60. Dialog
Timebox
dialog
--title 'Ajuste o Relógio'
--timebox 'nDICA: Use as setas e o TAB.' 0 0 23 59 30
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
60
61. Dialog
Yesno
dialog
--title 'AVISO'
--yesno 'n
O Vi foi instalado e configurado.
Você quer executá-lo agora?nn'
0 0
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
61
62. Dialog
Funcionamento do Dialog
•Os tipos de caixa apresentam alguma idéia de como funciona o Dialog ? De quais são suas principais funcionalidades ?
•Simples de usar , pode assustar um pouco nas primeiras tentativas, por possuir uma sintaxe diferente de outros programas utilizados pelo shell ;
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
62
63. Dialog
Funcionamento do Dialog
•Parâmetros obrigatórios
O formato de implementação mínimo e genérico do Dialog é :
dialog --tipo-da-caixa '<texto>' <altura> <largura>
tipo da caixa -> nome do tipo de caixa que se deseja utilizar;
texto -> O texto é a palavra ou frase que aparece no início da caixa, logo após a primeira linha (borda superior). Passe uma string vazia '' caso não deseje texto. altura -> A altura é o número de linhas que serão utilizadas para desenhar a caixa, inclusive a primeira e a última que fazem as bordas superior e inferior.
largura -> A largura é o número de colunas que serão utilizadas para desenhar a caixa, inclusive a primeira e a última que fazem as bordas esquerda e direita.
•Quebra de linha automática (uso do (n) desnecessário);
•Usando “0 0”(zero zero) para altura e largura = reajuste automático do tamanho da caixa;
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
63
64. Dialog
Funcionamento do Dialog
•Aprenderemos algumas características do Dialog como:
▫Usa código de retorno para botões Sim/Não, Ok/Cancel
▫Usa a saída de erro (STDERR) para textos e itens escolhidos
•Uma das caixas mais utilizadas do Dialog é a Yesno (sim,não), que dá opções ao usuário de confirmar ou negar uma escolha, mas como :
Saber qual foi a escolha do usuário ?
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 $?.
Com um teste simples na linha de comando , verificamos o valor que pode ser 0 (zero) ou 1, segue abaixo :
dialog --yesno 'sim ou não?' 0 0 ; echo Retorno: $?
Se o retorno for 0(zero) o usuário escolheu sim , se 1 escolheu não;
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
64
Memorizando -> SIM=0|NÃO=1
65. Dialog
Funcionamento do Dialog
•Como manipular esses retornos em scripts ?
Pode-se criar uma estrutura simples com if e else para lidar com os retornos , segue abaixo um exemplo :
dialog --yesno 'Quer saber o usuário logado ?' 0 0
if [ $? = 0 ]; then
echo "Agora são: $( date )"
else
echo 'Ok, não vou mostrar as horas.‘
fi
Esse exemplo pode ser minimizado, se não for necessário o else, passando a ser :
dialog --yesno 'Quer ver as horas?' 0 0 && echo "Agora são: $(date)"
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
65