interativa Apresentadores: Igor Rafael da Rocha Lus Eduardo Tenrio Silva Apresentadores
Igor Rafael da Rocha
Lus Eduardo Tenrio da Silva IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 2 Roteiro Introduo Shell Script Primeiro Programa SheBang! Comando echo Variveis Comentrios Parmetros Posicionais Status de Trminio Estrutura de condio Estrutura de repetio Funes Redirecionadores Arrays Pipes Processamento de texto Dicas Dialog; Introduo Tipos de caixa Funcionamento do dialog Uso do Dialog; Exemplos
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 3 Roteiro Introduo Shell Script Primeiro Programa SheBang! Comando echo Variveis Comentrios Parmetros Posicionais Status de Trminio Estrutura de condio Estrutura de repetio Funes Redirecionadores Arrays Pipes Processamento de texto Dicas Dialog; Introduo Tipos de caixa Funcionamento do dialog Uso do Dialog; Exemplos
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 4 Introduo O que shell?
Programa que permite ao usurio interagir com o Sistema Operacional(SO) atravs de comandos digitados do teclado.
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 5 Introduo 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 Introduo O que shell script?
Linguagem de script usada em vrios sistemas operacionais, com diferentes dialetos, dependendo do interpretador de comandos utilizado(shell). Wikipdia
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 7 Roteiro Introduo Shell Script Primeiro Programa SheBang! Comando echo Variveis Comentrios Parmetros Posicionais Status de Trminio Estrutura de condio Estrutura de repetio Funes Redirecionadores Arrays Pipes Processamento de texto Dicas Dialog; Introduo Tipos de caixa Funcionamento do dialog Uso do Dialog; Exemplos
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 8 Shell Script Primeiro Programa
Refere-se aos caracteres #!, quando os mesmos so os primeiros caracteres em um arquivo. Utilizado para identificar o tipo de interpretador que ser utilizado no programa.
$0- Nome do script em execuo $1-$9- Parmetros posicionais ${10} ...- Parmetros posicionais $#- Nmero de parmetros passados $$- PID $?- Valor de retorno
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 13 Shell Script Tipos de Variveis
Em shell-script as variveis no so tipadas, mas podemos limitar a atribuio de tipos a variveis com o comando declare Sintaxe: declare <OPTION(S)> <VARIABLE>=<value> Options: -a : Array -f : Funo -i : Inteiro -r : Somente leitura (constante)
Argumentos que so 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 Trmino (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 Trmino (exit)
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 19 Exit Code Number Significado 0 Script executado com sucesso 1 Erros Gerais 2 Uso indevduo do shell 126 Comando no pode ser executado 127 Comando no encontrado 128 Argumento invlido para exit 128 +n Erro Fatal +sinal n 130 Finalizado com Ctrl +c 255* Fora do intervalo Shell Script Estrutura de Condio
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 22 Shell Script Tabela de opes Comparativos de nmeros:
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 23 Operao 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 opes Comparativos de strings:
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 24 Operao Significado [ -z STRING ] Verifica se string possui comprimento zero [ -n STRING] ou [ STRING ] Verifica se string no possui comprimento zero [ STRING1 == STRING2 ] Verifica se strings so iguais [ STRING1 != STRING2 ] Verifica se strings so diferentes [ STRING1 < STRING2 ] Verifica se STRING1 menor que STRING2 [ STRING1 > STRING2 ] Verifica se STRING1 maior que STRING2 Shell Script Tabela de opes Expresses:
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 25 Operao Significado [ !EXPR ] Negao do valor da expresso ( verdade se EXPR falso) [ (EXPR) ] Precedncia [ EXPR1 -a EXPR2 ] ou [ EXPR1 && EXPR2 ] Tabela and [ EXPR1 -o EXPR2 ] ou [ EXPR1 || EXPR2 ] Tabela or Shell Script Tabela de opes Operaes com arquivos :
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 26 Operao Significado [ -e ARQ ] Verdadeiro se ARQ existe. [ -d ARQ ] Verdadeiro se ARQ existe e se diretrio. [ -r ARQ ] Verdadeiro se ARQ existe e se legvel. [ -w ARQ ] Verdadeiro se ARQ existe e se tem permisso de escrita. [ -x ARQ ] Verdadeiro se ARQ existe e se executvel [ -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 Repetio
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
Devem ser declaradas antes de suas chamadas No podem estarem vazias Podem ser criadas dentro de outras funes (embora intil) Podem ser declaradas com nomes estranhos ( _ , : , %) Uma mesma funo pode ser definida varias vezes, porm a ultima verso a que invocada
> - redireciona sada padro para um arquivo, removendo-o caso exista. >>- redireciona sada padro para um arquivo, adicionando-a no final do arquivo. < - redireciona a entrada padro para um arquivo 2>- redireciona sada de erro padro para um arquivo, removendo-o caso exista. 2>> - redireciona sada de erro padro para um arquivo, adicionando-a no final do arquivo.
Declarao 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 comunicao interprocessos onde a sada 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 expresses 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 programao 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 tabulao
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 43 Shell Script Processamento de texto(grep) aplicativo que faz buscas procurando linhas que respeitem a expresso 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 comentrios Evitar o uso de nmeros mgicos Nomes descritivos para variveis e funes Utilize exit de forma sistemtica e significativa Quebrar scripts complexos em partes mais simples(utilizando funes) Evite redundncias IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 45 Roteiro Introduo Shell Script Primeiro Programa SheBang! Comando echo Variveis Comentrios Parmetros Posicionais Status de Trminio Estrutura de condio Estrutura de repetio Funes Redirecionadores Arrays Pipes Processamento de texto Dicas Dialog; Introduo Tipos de caixa Funcionamento do dialog Uso do Dialog; Exemplos
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 46 Dialog Introduo O que o Dialog O Dialog um programa para console (modo texto) que desenha caixas de dilogo na tela, similares as do modo grfico, com botes, entradas para texto e menu AURELIO, M. J. Parmetros via linha de comando; Interatividade = usurio precisa operar durante a execuo; Semelhana com programas grficos; til para logins registros ; Prtico para iniciantes ; Vrias verses at a atual ;
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 47 Dialog Tipos de caixa
dialog\ --title 'Seleo 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 avanado de som' off
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
dialog\ --title 'AVISO' \ --yesno '\n O Vi foi instalado e configurado. Voc quer execut-lo agora?\n\n' \ 0 0
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 61 Dialog Funcionamento do Dialog Os tipos de caixa apresentam alguma idia de como funciona o Dialog ? De quais so 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 Parmetros obrigatrios O formato de implementao mnimo e genrico 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 incio da caixa, logo aps a primeira linha (borda superior). Passe uma string vazia '' caso no deseje texto. altura -> A altura o nmero de linhas que sero utilizadas para desenhar a caixa, inclusive a primeira e a ltima que fazem as bordas superior e inferior. largura -> A largura o nmero de colunas que sero utilizadas para desenhar a caixa, inclusive a primeira e a ltima que fazem as bordas esquerda e direita. Quebra de linha automtica (uso do (\n) desnecessrio); Usando 0 0(zero zero) para altura e largura = reajuste automtico do tamanho da caixa;
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 63 Dialog Funcionamento do Dialog Aprenderemos algumas caractersticas do Dialog como: Usa cdigo de retorno para botes Sim/No, Ok/Cancel Usa a sada de erro (STDERR) para textos e itens escolhidos Uma das caixas mais utilizadas do Dialog a Yesno (sim,no), que d opes ao usurio de confirmar ou negar uma escolha, mas como : Saber qual foi a escolha do usurio ? O Dialog utiliza o cdigo de retorno ("Return Code") para informar qual foi o boto apertado. Como sabemos, o shell guarda esse cdigo dentro da varivel $?. Com um teste simples na linha de comando , verificamos o valor que pode ser 0 (zero) ou 1, segue abaixo : dialog --yesno 'sim ou no?' 0 0 ; echo Retorno: $? Se o retorno for 0(zero) o usurio escolheu sim , se 1 escolheu no;
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 64 Memorizando -> SIM=0|NO=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 usurio logado ?' 0 0 if [ $? = 0 ]; then echo "Agora so: $( date )" else echo 'Ok, no vou mostrar as horas. fi Esse exemplo pode ser minimizado, se no for necessrio o else, passando a ser : dialog --yesno 'Quer ver as horas?' 0 0 && echo "Agora so: $(date)"
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com 65 Dialog Funcionamento do Dialog