Sei sulla pagina 1di 68

Minicurso:Desenvolvendo aplicaes

em Shell Script com interface


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

#!/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 so 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 sada do shell
-e: interpreta caracteres de escape

Obs:
Interpreta variveis (aspas duplas)
No interpreta variveis (aspas simples)
`` - Interpreta comandos (crases)



IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
11
Shell Script
Variveis

Definio
NOME=valor


Acesso:
$NOME



IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
12
Shell Script
Variveis especiais

$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)


IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
14
Shell Script
Comando read

Recebe entrada do usurio e guarda em uma varivel

Sintaxe
read VARIABLE



IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
15
Shell Script
Comentrios

Linhas que sero ignoradas pelo interpretador. Utilizado para
descrever a lgica ou algum comando utilizado.

Sintaxe:
#
IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
16
Shell Script
Parmetros Posicionais

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
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 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

IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
30
Shell Script
Funes

Sub-rotinas (bloco de cdigo) que implementa um conjunto
de operaes e executa uma tarefa especfica.

Sintaxe:
function_name () {
command...
}
Chamada:
function_name



IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
31
Shell Script
Funes

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



IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
32
Shell Script
Funes









Como passar argumentos para funes?
R:Utilizando parmetros posicionais.

Como retornar valores?
R: trs 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 padro
stdout: Sada padro
stderr: Sada 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 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.



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




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

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 '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

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 'Instalao 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 'Confirmao' \
--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 instalao:' \ 0
0 0 \
mnima 'Instala o mnimo' \
completa 'Instala tudo' \
customizada 'Voc escolhe'


IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
55
Dialog
Msgbox

dialog\
--title 'Parabns' \
--msgbox 'Instalao 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 Relgio' \
--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?\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







IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
66
Dialog

IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
67
Referncias




IF-AL igorlogos@gmail.com | eduardovansilva@gmail.com
68

Potrebbero piacerti anche