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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
8
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
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
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
Shell Script 
Variáveis 
•Definição 
▫NOME=valor 
•Acesso: 
▫$NOME 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
14
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
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
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
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
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
Shell Script 
Estrutura de Condição 
•If...Else 
•If...Elif...Else 
•Case 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
20
Shell Script 
If...Else 
•Sintaxe: 
if [ OPTION(s) ];then 
CONDITION 
else 
CONDITION 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
21
Shell Script 
If...Elif...Else 
•Sintaxe: 
if [ OPTION(s) ];then 
CONDITION 
elif [ OPTION(s) ];then 
CONDITION 
else 
CONDITION 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
22
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)
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
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
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
Shell Script 
Case 
•Sintaxe: 
case "$variable" in "$condition1" ) command... ;; "$condition2" ) command... ;; *) command... ;; esac 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
27
Shell Script 
Estrutura de Repetição 
•For 
•While 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
28
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
Shell Script 
For 
•Sintaxe: 
while [ condition ];do command(s)... 
done 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
33
Shell Script 
Redirecionadores 
Canais do Shell 
•stdin: Entrada padrão 
•stdout: Saída padrão 
•stderr: Saída padrã de erro 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
34
Shell Script 
Redirecionadores 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
35
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
Shell Script 
Redirecionadores 
•Dispositivos especiais 
▫/dev/null 
▫/dev/zero 
▫/dev/random 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
37
Shell Script 
Arrays 
•Declaração 
▫name=( value0 value1 value2 “value3") 
▫name[1]=value1 
▫declare -a variable 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
40
Shell Script 
Processamento de texto 
•Sed 
•Awk 
•Grep 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
47
Dialog 
Tipos de caixa 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
48
Dialog 
Calendar 
dialog 
--title 'Escolha a data'  
--calendar ''  
0 0  
31 12 1999 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
50
Dialog 
Fselect 
dialog 
--title 'Escolha onde instalar'  
--fselect /usr/share/vim/  
0 0 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
51
Dialog 
Gauge 
dialog 
--title 'Instalação dos Pacotes'  
--gauge 'nInstalando Vim-6.0a.tgz...'  8 40 60 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
52
Dialog 
Infobox 
dialog 
--title 'Aguarde'  
--infobox 'n 
Finalizando em 5 segundos...'  
0 0 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
53
Dialog 
Inputbox, Passwordbox 
dialog 
--title 'Confirmação'  
--passwordbox 'Por favor, confirme a senha:'  
0 0 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
55
Dialog 
Msgbox 
dialog 
--title 'Parabéns'  
--msgbox 'Instalação finalizada com sucesso.'  
6 40 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
57
Dialog 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
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 igorlogos@gmail.com | eduardovansilva@gmail.com 
59
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
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
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
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
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
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
Dialog 
Funcionamento do Dialog 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
66
Dialog 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
67
Referências 
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 
68

Minicurso Shell Script

  • 1.
    Minicurso:Desenvolvendo aplicações emShell Script com interface interativa Apresentadores: Igor Rafael da Rocha Luís Eduardo Tenório Silva
  • 2.
    Apresentadores Igor Rafaelda Rocha Luís Eduardo Tenório da Silva IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 2
  • 3.
    Roteiro •Introdução •ShellScript ▫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 •ShellScript ▫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 deshell •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 •ShellScript ▫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 PrimeiroPrograma #!/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 Comandoecho •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
  • 12.
    Shell Script Variáveis •Definição ▫NOME=valor •Acesso: ▫$NOME IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 12
  • 13.
    Shell Script Variáveisespeciais •$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 Tiposde 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 Comandoread •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âmetrosPosicionais •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 Statusde 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 Statusde 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
  • 20.
    Shell Script Estruturade Condição •If...Else •If...Elif...Else •Case IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 20
  • 21.
    Shell Script If...Else •Sintaxe: if [ OPTION(s) ];then CONDITION else CONDITION IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 21
  • 22.
    Shell Script If...Elif...Else •Sintaxe: if [ OPTION(s) ];then CONDITION elif [ OPTION(s) ];then CONDITION else CONDITION IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 22
  • 23.
    Shell Script Tabelade 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 Tabelade 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 Tabelade 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 Tabelade 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
  • 28.
    Shell Script Estruturade Repetição •For •While IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 28
  • 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
  • 34.
    Shell Script Redirecionadores Canais do Shell •stdin: Entrada padrão •stdout: Saída padrão •stderr: Saída padrã de erro IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 34
  • 35.
    Shell Script Redirecionadores IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 35
  • 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
  • 37.
    Shell Script Redirecionadores •Dispositivos especiais ▫/dev/null ▫/dev/zero ▫/dev/random IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 37
  • 38.
    Shell Script Arrays •Declaração ▫name=( value0 value1 value2 “value3") ▫name[1]=value1 ▫declare -a variable IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 38
  • 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
  • 41.
    Shell Script Processamentode texto •Sed •Awk •Grep IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 41
  • 42.
    Shell Script Processamentode 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 Processamentode 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 Processamentode 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 AlgumasDicas •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 •ShellScript ▫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 •Oque é 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 decaixa IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 48
  • 49.
    Dialog Calendar dialog --title 'Escolha a data' --calendar '' 0 0 31 12 1999 IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 49
  • 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
  • 51.
    Dialog Fselect dialog --title 'Escolha onde instalar' --fselect /usr/share/vim/ 0 0 IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 51
  • 52.
    Dialog Gauge dialog --title 'Instalação dos Pacotes' --gauge 'nInstalando Vim-6.0a.tgz...' 8 40 60 IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 52
  • 53.
    Dialog Infobox dialog --title 'Aguarde' --infobox 'n Finalizando em 5 segundos...' 0 0 IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 53
  • 54.
    Dialog Inputbox, Passwordbox dialog --title 'Confirmação' --passwordbox 'Por favor, confirme a senha:' 0 0 IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 54
  • 55.
    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 igorlogos@gmail.com | eduardovansilva@gmail.com 55
  • 56.
    Dialog Msgbox dialog --title 'Parabéns' --msgbox 'Instalação finalizada com sucesso.' 6 40 IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 56
  • 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
  • 59.
    Dialog Textbox dialog --title 'Visualizando Arquivo' --textbox/usr/share/vim/vim60/indent.vim 0 0 IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 59
  • 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 doDialog •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 doDialog •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 doDialog •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 doDialog •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
  • 66.
    Dialog Funcionamento doDialog IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 66
  • 67.
    Dialog IF-AL igorlogos@gmail.com| eduardovansilva@gmail.com 67
  • 68.
    Referências IF-AL igorlogos@gmail.com| eduardovansilva@gmail.com 68