68
Minicurso:Desenvolvendo aplicações em Shell Script com interface interativa Apresentadores: Igor Rafael da Rocha Luís Eduardo Tenório Silva

Minicurso Shell Script

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

Page 1: Minicurso Shell Script

Minicurso:Desenvolvendo aplicações

em Shell Script com interface

interativa

Apresentadores: Igor Rafael da Rocha

Luís Eduardo Tenório Silva

Page 2: Minicurso Shell Script

Apresentadores

Igor Rafael da Rocha

Luís Eduardo Tenório da Silva

IF-AL [email protected] | [email protected]

2

Page 3: Minicurso Shell Script

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

Page 4: Minicurso Shell Script

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

Page 5: Minicurso Shell Script

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

Page 6: Minicurso Shell Script

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

Page 7: Minicurso Shell Script

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

Page 8: Minicurso Shell Script

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

Page 9: Minicurso Shell Script

Shell Script

Primeiro Programa

#!/bin/bash

echo -e “Hello World!”

• Terminal:

▫ chmod +x hello.sh

▫ ./hello.sh

IF-AL [email protected] | [email protected]

9

Page 10: Minicurso Shell Script

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

Page 11: Minicurso Shell Script

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

Page 12: Minicurso Shell Script

Shell Script

Variáveis

• Definição ▫ NOME=valor

• Acesso: ▫ $NOME

IF-AL [email protected] | [email protected]

12

Page 13: Minicurso Shell Script

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

Page 14: Minicurso Shell Script

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

Page 15: Minicurso Shell Script

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

Page 16: Minicurso Shell Script

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

Page 17: Minicurso Shell Script

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

Page 18: Minicurso Shell Script

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

Page 19: Minicurso Shell Script

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

Page 20: Minicurso Shell Script

Shell Script

Estrutura de Condição

• If...Else

• If...Elif...Else

• Case

IF-AL [email protected] | [email protected]

20

Page 21: Minicurso Shell Script

Shell Script

If...Else

• Sintaxe:

if [ OPTION(s) ];then

CONDITION

else

CONDITION

IF-AL [email protected] | [email protected]

21

Page 22: Minicurso Shell Script

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

Page 23: Minicurso Shell Script

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)

Page 24: Minicurso Shell Script

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

Page 25: Minicurso Shell Script

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

Page 26: Minicurso Shell Script

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

Page 27: Minicurso Shell Script

Shell Script

Case • Sintaxe: case "$variable" in

"$condition1" ) command... ;; "$condition2" ) command... ;; *) command... ;; esac

IF-AL [email protected] | [email protected]

27

Page 28: Minicurso Shell Script

Shell Script

Estrutura de Repetição

• For

• While

IF-AL [email protected] | [email protected]

28

Page 29: Minicurso Shell Script

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

Page 30: Minicurso Shell Script

Shell Script

For

• Sintaxe:

while [ condition ];do command(s)...

done

IF-AL [email protected] | [email protected]

30

Page 31: Minicurso Shell Script

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

Page 32: Minicurso Shell Script

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

Page 33: Minicurso Shell Script

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

Page 34: Minicurso Shell Script

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

Page 35: Minicurso Shell Script

Shell Script

Redirecionadores

IF-AL [email protected] | [email protected]

35

Page 36: Minicurso Shell Script

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

Page 37: Minicurso Shell Script

Shell Script

Redirecionadores

• Dispositivos especiais ▫ /dev/null

▫ /dev/zero

▫ /dev/random

IF-AL [email protected] | [email protected]

37

Page 38: Minicurso Shell Script

Shell Script

Arrays

• Declaração ▫ name=( value0 value1 value2 “value3")

▫ name[1]=value1

▫ declare -a variable

IF-AL [email protected] | [email protected]

38

Page 39: Minicurso Shell Script

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

Page 40: Minicurso Shell Script

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

Page 41: Minicurso Shell Script

Shell Script

Processamento de texto

• Sed

• Awk

• Grep

IF-AL [email protected] | [email protected]

41

Page 42: Minicurso Shell Script

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

Page 43: Minicurso Shell Script

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

Page 44: Minicurso Shell Script

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

Page 45: Minicurso Shell Script

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

Page 46: Minicurso Shell Script

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

Page 47: Minicurso Shell Script

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

Page 48: Minicurso Shell Script

Dialog Tipos de caixa

IF-AL [email protected] | [email protected]

48

Page 49: Minicurso Shell Script

Dialog

Calendar

dialog\ --title 'Escolha a data' \ --calendar '' \ 0 0 \ 31 12 1999

IF-AL [email protected] | [email protected]

49

Page 50: Minicurso Shell Script

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

Page 51: Minicurso Shell Script

Dialog

Fselect dialog\ --title 'Escolha onde instalar' \ --fselect /usr/share/vim/ \

0 0

IF-AL [email protected] | [email protected]

51

Page 52: Minicurso Shell Script

Dialog

Gauge dialog\ --title 'Instalação dos Pacotes' \ --gauge '\nInstalando Vim-6.0a.tgz...' \ 8 40 60

IF-AL [email protected] | [email protected]

52

Page 53: Minicurso Shell Script

Dialog Infobox dialog\ --title 'Aguarde' \ --infobox '\n Finalizando em 5 segundos...' \ 0 0

IF-AL [email protected] | [email protected]

53

Page 54: Minicurso Shell Script

Dialog Inputbox, Passwordbox dialog\ --title 'Confirmação' \ --passwordbox 'Por favor, confirme a senha:' \ 0 0

IF-AL [email protected] | [email protected]

54

Page 55: Minicurso Shell Script

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

Page 56: Minicurso Shell Script

Dialog

Msgbox dialog\ --title 'Parabéns' \ --msgbox 'Instalação finalizada com sucesso.' \ 6 40

IF-AL [email protected] | [email protected]

56

Page 57: Minicurso Shell Script

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

Page 58: Minicurso Shell Script

Dialog

IF-AL [email protected] | [email protected]

58

Tailbox, Tailboxbg dialog\ --title 'Monitorando Mensagens do Sistema' \ --tailbox out \ 0 0

Page 59: Minicurso Shell Script

Dialog

Textbox dialog\ --title 'Visualizando Arquivo' \ --textbox/usr/share/vim/vim60/indent.vim \ 0 0

IF-AL [email protected] | [email protected]

59

Page 60: Minicurso Shell Script

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

Page 61: Minicurso Shell Script

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

Page 62: Minicurso Shell Script

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

Page 63: Minicurso Shell Script

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

Page 64: Minicurso Shell Script

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

Page 65: Minicurso Shell Script

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

Page 66: Minicurso Shell Script

Dialog

Funcionamento do Dialog

IF-AL [email protected] | [email protected]

66

Page 67: Minicurso Shell Script

Dialog

IF-AL [email protected] | [email protected]

67

Page 68: Minicurso Shell Script

Referências

IF-AL [email protected] | [email protected]

68