Upload
luis-eduardo
View
168
Download
0
Embed Size (px)
DESCRIPTION
Minicurso ministrado por Igor Rafael e Luís Eduardo no Encontro de Iniciação Científica realizado no Instituto Federal de Alagoas (IFAL).
Citation preview
Minicurso:Desenvolvendo aplicações
em Shell Script com interface
interativa
Apresentadores: Igor Rafael da Rocha
Luís Eduardo Tenório Silva
Apresentadores
Igor Rafael da Rocha
Luís Eduardo Tenório da Silva
IF-AL [email protected] | [email protected]
2
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 [email protected] | [email protected]
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 [email protected] | [email protected]
4
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 [email protected] | [email protected]
5
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 [email protected] | [email protected]
6
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 [email protected] | [email protected]
7
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 [email protected] | [email protected]
8
Shell Script
Primeiro Programa
#!/bin/bash
echo -e “Hello World!”
• Terminal:
▫ chmod +x hello.sh
▫ ./hello.sh
IF-AL [email protected] | [email protected]
9
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 [email protected] | [email protected]
10
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 [email protected] | [email protected]
11
Shell Script
Variáveis
• Definição ▫ NOME=valor
• Acesso: ▫ $NOME
IF-AL [email protected] | [email protected]
12
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 [email protected] | [email protected]
13
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 [email protected] | [email protected]
14
Shell Script
Comando read
• Recebe entrada do usuário e guarda em uma variável
• Sintaxe ▫ read VARIABLE
IF-AL [email protected] | [email protected]
15
Shell Script
Comentários
• Linhas que serão ignoradas pelo interpretador. Utilizado para descrever a lógica ou algum comando utilizado.
• Sintaxe:
▫ #
IF-AL [email protected] | [email protected]
16
Shell Script
Parâmetros Posicionais
• Argumentos que são passados na linha de comando quando invocado um script.
• Sintaxe: ▫ $1...$9
▫ ${10} ….
IF-AL [email protected] | [email protected]
17
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 [email protected] | [email protected]
18
Shell Script
Status de Término (exit)
IF-AL [email protected] | [email protected]
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
Shell Script
Estrutura de Condição
• If...Else
• If...Elif...Else
• Case
IF-AL [email protected] | [email protected]
20
Shell Script
If...Else
• Sintaxe:
if [ OPTION(s) ];then
CONDITION
else
CONDITION
IF-AL [email protected] | [email protected]
21
Shell Script
If...Elif...Else
• Sintaxe:
if [ OPTION(s) ];then
CONDITION
elif [ OPTION(s) ];then
CONDITION
else
CONDITION
IF-AL [email protected] | [email protected]
22
Shell Script
Tabela de opções
• Comparativos de números:
IF-AL [email protected] | [email protected]
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)
Shell Script
Tabela de opções
• Comparativos de strings:
IF-AL [email protected] | [email protected]
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
Shell Script
Tabela de opções
• Expressões:
IF-AL [email protected] | [email protected]
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
Shell Script
Tabela de opções
• Operações com arquivos :
IF-AL [email protected] | [email protected]
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
Shell Script
Case • Sintaxe: case "$variable" in
"$condition1" ) command... ;; "$condition2" ) command... ;; *) command... ;; esac
IF-AL [email protected] | [email protected]
27
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 [email protected] | [email protected]
29
Shell Script
For
• Sintaxe:
while [ condition ];do command(s)...
done
IF-AL [email protected] | [email protected]
30
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 [email protected] | [email protected]
31
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 [email protected] | [email protected]
32
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 [email protected] | [email protected]
33
Shell Script
Redirecionadores
Canais do Shell • stdin: Entrada padrão • stdout: Saída padrão • stderr: Saída padrã de erro
IF-AL [email protected] | [email protected]
34
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 [email protected] | [email protected]
36
Shell Script
Redirecionadores
• Dispositivos especiais ▫ /dev/null
▫ /dev/zero
▫ /dev/random
IF-AL [email protected] | [email protected]
37
Shell Script
Arrays
• Declaração ▫ name=( value0 value1 value2 “value3")
▫ name[1]=value1
▫ declare -a variable
IF-AL [email protected] | [email protected]
38
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 [email protected] | [email protected]
39
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 [email protected] | [email protected]
40
Shell Script
Processamento de texto
• Sed
• Awk
• Grep
IF-AL [email protected] | [email protected]
41
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 [email protected] | [email protected]
42
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 [email protected] | [email protected]
43
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 [email protected] | [email protected]
44
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 [email protected] | [email protected]
45
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 [email protected] | [email protected]
46
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 [email protected] | [email protected]
47
Dialog
Calendar
dialog\ --title 'Escolha a data' \ --calendar '' \ 0 0 \ 31 12 1999
IF-AL [email protected] | [email protected]
49
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 [email protected] | [email protected]
50
Dialog
Fselect dialog\ --title 'Escolha onde instalar' \ --fselect /usr/share/vim/ \
0 0
IF-AL [email protected] | [email protected]
51
Dialog
Gauge dialog\ --title 'Instalação dos Pacotes' \ --gauge '\nInstalando Vim-6.0a.tgz...' \ 8 40 60
IF-AL [email protected] | [email protected]
52
Dialog Infobox dialog\ --title 'Aguarde' \ --infobox '\n Finalizando em 5 segundos...' \ 0 0
IF-AL [email protected] | [email protected]
53
Dialog Inputbox, Passwordbox dialog\ --title 'Confirmação' \ --passwordbox 'Por favor, confirme a senha:' \ 0 0
IF-AL [email protected] | [email protected]
54
Dialog Menu dialog\ --title 'Perfil' \ --menu 'Escolha o perfil da instalação:' \ 0 0 0 \ mínima 'Instala o mínimo' \ completa 'Instala tudo' \ customizada 'Você escolhe'
IF-AL [email protected] | [email protected]
55
Dialog
Msgbox dialog\ --title 'Parabéns' \ --msgbox 'Instalação finalizada com sucesso.' \ 6 40
IF-AL [email protected] | [email protected]
56
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 [email protected] | [email protected]
57
Dialog
IF-AL [email protected] | [email protected]
58
Tailbox, Tailboxbg dialog\ --title 'Monitorando Mensagens do Sistema' \ --tailbox out \ 0 0
Dialog
Textbox dialog\ --title 'Visualizando Arquivo' \ --textbox/usr/share/vim/vim60/indent.vim \ 0 0
IF-AL [email protected] | [email protected]
59
Dialog
Timebox dialog\ --title 'Ajuste o Relógio' \ --timebox '\nDICA: Use as setas e o TAB.' \ 0 0 \ 23 59 30
IF-AL [email protected] | [email protected]
60
Dialog Yesno dialog\ --title 'AVISO' \ --yesno '\n O Vi foi instalado e configurado. Você quer executá-lo agora?\n\n' \ 0 0
IF-AL [email protected] | [email protected]
61
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 [email protected] | [email protected]
62
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 [email protected] | [email protected]
63
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 [email protected] | [email protected]
64
Memorizando -> SIM=0|NÃO=1
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 [email protected] | [email protected]
65