Você está na página 1de 83

Programao

SHELL SCRIPT

Instrutor Airton Kuada


email - airton@fesppr.br
Curitiba, julho de 2004

Agenda

Introduo

Funes de Terminal

Estrutura de um Shell Script

Apresentao em mensagens

Variveis

Comando de controle de fluxo

Funes

Introduo

Finalidade.

Faz a interao entre o usurio e o Sistema


Operacional

Funcionalidade do Shell

Atravs de linha de comando

Pesquisa por um comando e executa o programa a


ele associado.
Subistitui os valores da varivel Shell por variveis
associadas
Manipula redirecionalmento de E/S e Pipelines

Contm interface de programao interpretada

Introduo

Tipos de SHELL

Shells mais utilizados

bash - LINUX SHELL

sh - POSIX SHELL

ksh - KORN SHELL

bsh - BOURN SHELL

csh - C SHELL

rksh - KORN SHELL RESTRITO

rbsh - BOURN SHELL RESTRITO

Ambiente do Usurio

o ambiente criado para o usurio, aps o momento que


aceito o seu pedido de sesso com o Sistema Operacional
(Login)
Seu ambiente contm as seguintes informaes:

Nome do Usurio

Identificaao do usurio

Diretrio Home

Caixa postal

Path

Qual o Shell que est sendo utilizado

Tipo de Terminal

Logon no Sistema

Tela de Logon do Sistema

Usurio informa UserId e Senha

Sistema Operacional faz autenticao (/etc/passwd)

Usurio levado at seu diretrio HOME

Shell iniciado

Profile do Sistema Operacional executado

Profile do Usurio executado

Apresentao do Prompt de Sesso ( # ou $ ).

Solicita o
nome do
usurio

Executa
o shell

Solicita a
senha do
usurio

Executa o
/etc/profile

Logon no Sistema

No

Login
vlido?

Executa o
.profile no
diretrio home

Sim

Coloca o usurio
no diretrio
home

Apresenta
o prompt
da console

Shell Script

Shell Script uma sequncia de comandos que so


armazenados em um arquivo do tipo texto e so
executados sequencialmente pelo interpretador de
comando (Shell) . Esta sequencia de comandos pode
ser executado diretamente na console do
computador.
Podemos dizer um Shell Script uma automatizao
de uma sequencia comandos que so executados
repetidamente pelo usurio de um computador.

Shell Script

Por que utilizar Shell Script

Economizar tempo

Automatizar tarefas do dia a dia

Parte da administrao pode ser automatizada

Podemos criar novos comandos

Desenvolvimento rpido

Facilidade de desenvolvimento e manuteno

Shell Script - Exemplo


#!/bin/bash
#------------------------------------------------------------------------#
#
Este um exemplo de Shell Script
#
#
Objetivo Mostrar os arquivos do
#
#
diretrio corrente, utilizando #
#
paginao
#------------------------------------------------------------------------#
clear
echo "Os arquivos deste diretrios so: "
ls -la | more
#--------- Fim do Script ---------------------------------------#

Shell Script - Estrutura


#!/bin/bash
(obrigatrio sempre)
Comando1
comando2
comando3
comando4
# Esta linha um comentrio e no ser executado
comando5
comando6

Shell Script

Escrever o Shell Script

Executar o Script

. arquivo_do_script

bash arquivo_do_script

Atribuir a propriedade de execuo no arquivo

chmod +x arquivo_do_script

chmod 755 arquivo_do_script

ou

Para ativar o modo debug no Script necessrio


acrescentar o parametro -x como mostrado abaixo.

#!/bin/bash -x

Metacaracteres
Metacaracter
O que faz
*
Substitui qualquer string ou grupo de caracteres
?
Substitui um nico caracter
[....]
Substitui qualquer dos caracteres contidos entre os colchetes
Exemplo
ls *
ls a*
ls *.c
ls ut*.c
ls ?
ls fo?
ls [abc]*
ls [a-d]*

Significado
Mostrar todos os nomes de arquivos
Mostrar todos os nomes de arquivos
a
Mostrar todos os nomes de arquivos
.c
Mostrar todos os nomes de arquivos
letras ut e possuem a extenso .c
Mostrar todos os nomes de arquivos
Mostrar todos os nomes de arquivos
iniciam com as letras fo.
Mostrar todos os nomes de arquivos
Mostrar todos os nomes de arquivos

que iniciam com a letra


que possuem a extenso
que iniciam com as
que possuem 1 caracter.
com trs letras e que
que iniciam a ou b ou c.
que iniciam a, b, c ou d.

Execuo de Comandos

Normalmente executamos apenas um comando por


vez em um prompt de comando.
Exemplo

$ ls

$ date

$ who

O Unix permite que o usurio execute dois ou mais


comandos, utilizando o mesmo prompt.
Exemplo

$ ls;date;who

Redirecionamento de E/S

Os perifricos de entrada e sada no mundo Unix


esto associados a arquivos que esto localizados
no diretrio /dev. Ex: console, hda, ttyS*, video,
audio
Para acessar um arquivo, o sistema operacional
associa um identificador numrico (handle) para
controlar o acesso
Os handles 0, 1, 2 esto constantemente ligados aos
perifricos teclado, monitor e monitor
respectivamente.

Redirecionamento de E/S

Aplicaes enviam a sada para o terminal de vdeo,


exemplo: ls, banner, who
Aplicaes obtm a entrada atravs do teclado,
exemplo: mail, write, cat.
O Unix permite que seja realizado o
redirecionamento da sada, isto , a sada de uma
aplicao que normalmente a unidade de vdeo
(/dev/video) pode ser redirecionada para um
arquivo.
O Unix permite que seja realizado o
redirecionamento de entrada, isto , a entrada de
uma aplicao que normalmente o teclado
(/dev/console) pode ser redirecionada para o
contedo de um arquivo.

Redirecionamento de E/S

A unidade de vdeo tambm conhecida como sada


padro ou stdout (standard output), handle 1
O teclado tambm conhecido como entrada
padro ou stdin (standard input), handle 0
Todas mensagens de erros geradas durante a
execuo de um programa so enviadas para o
handle 2 que tambm est associado a unidade de
vdeo e tambm conhecido como sada de erro
padro ou stderr
Quando no necessrio apresentar nenhuma sada,
podemos redirecionar a stdout e stderr para o
BURACO NEGRO (/dev/null)

Redirecionamento de E/S

O simbolo de redirecionamento de sada


entrada

ls -la > saida.txt

No exemplo acima o resultado do comando ls ser


enviado o arquivo saida.txt, se por ventura o arquivo
j existir, todo o seu contedo ser apagado.
Redirecionamento de entrada, exemplo:

<

Redirecionamento de sada, exemplo:

> e de

cat < saida.txt

No exemplo acima, o comando cat ir mostrar o


contudo do arquivo saida.

Redirecionamento de E/S

Para adicionar informaes a um arquivo, utilizamos


o simbolo

>>

Exemplo:

ls *.txt > saida.txt

ls *.tst >> saida.txt

No primeiro comando o arquivo saida.txt


inicializado e no segundo comando, o arquivo
incrementado com novas informaes
Podemos iniciar um arquivo tambm da seguinte
forma:

> saida.txt

Redirecionamento de E/S

Podemos redirecionar os erros que podem


eventualmente ocorrer durante o processamento de
um comando
Exemplo

ls -la *.wxs

Se no existir nenhum arquivo com esta extenso


ento teremos a mensagem de erro abaixo que
aparecer no vdeo

/usr/bin/ls: *.wxs: No such file or directory

Para evitar a situao acima, podemos redirecionar


a saida de erro padro (stderr) para um arquivo
Exemplo

ls -la *.wxs 2> erro.txt

Exerccio 1

Utilizando o comando find, buscar os arquivos que


foram alterado hoje e redirecionando a sada para o
arquivo hoje.txt
Utilizando o comando find, buscar os arquivo que
possuam as extenso .cfg, redirecionando a sada
para o arquivo cfg.txt
Juntar o arquivo hoje.txt e cfg.txt em um nico
arquivo chamado total.txt

PIPELINES

Um PIPE nada mais do que um local temporario


de armazenamento de dados que ser repassado
para um prximo comando.
A utilizao de PIPES permite conectar a sada de
um comando com a entrada de outro, para que ela
possa ser tratada por este seguinte.
O sinal de PIPE a barra |
Para que um comando possa ter um sinal de PIPE
esquerda, ele deve ler a entrada padro
Para que um comando possa ter um sinal de PIPE
direita, ele deve escrever na saida padro.

PIPELINE

Exemplo de utilizao:

Queremos saber quantos arquivos existem em


uma determinada pasta.

Primeira Forma Sequencial

ls -la > saida.txt

wc -l saida.txt

Segunda Forma - Pipeline

ls -la | wc -l

No exemplo acima, o comando ls executado


integralmete. O resultado passado para o comando
wc que ir contar a quantidade de linhas que
resultaram do processamento do comando ls.

Exerccios 2

Mostrar todos os arquivos de um diretrio (ls),


realizando a paginao (more).
Mostrar todos os usurios que esto em sesso no
sistema (logados) (who) em ordem alfabtica (sort).
Mostrar o nmero de usurios que esto em sesso no
sistema.
Mostrar (cat) todos os usurios cadastrados no sistema,
(/etc/passwd) ordenados em ordem alfabtica.
Montar um arquivo (cadastro.txt) com todos os usurios
cadastrados no sistema (/etc/passwd) ordenados em
ordem alfabtica.
Pesquisar se o usurio raul est logado. (who+grep)

Filtros

A maioria dos comandos utilizam apenas a sada


padro (stdout), ou a entrada padro (stdin)
Filtros so comandos que laceitam a entrada pela
entrada padro e produz um resultado na sada
padro.
Exemplo

cat < arquivo.txt | sort | uniq > u_name.txt

No exemplo acima, o comando cat ir mostrar o


contedo do arquivo. Este contedo ser ordenado e
finalmente o comando uniq ir remover a entrada
duplicadas do arquivo.

Apresentao de Mensagens

Para interagir com o usurio o shell necessita enviar


mensagens e mostrar valores de variveis para a
console de vdeo. Para isso utilizado o comando
echo
Exemplo: echo [options] [string variaveis ...]

echo Mensagem do Shell

echo 'Mensagem do Shell'

echo Mensagem do Shell

Existem diferenas entre os tres exemplos. Estas


diferenas sero abordados adiante.

Echo - Opes

-n Do not output the trailing new line.


-e Enable interpretation of the following backslash escaped
characters in the strings:

\a alert (bell)

\b backspace

\c suppress trailing new line

\n new line

\r carriage return

\t horizontal tab

\\ backslash

Exemplo:

echo -e "Amanh vou pescar \a\t\t com meu amigo\n"

Variveis

O Shell permite a criao de variveis


s variveis so atribudas valores que so cadeias
de caracteres
No existe a definio de tipo de varivel
O nomes de variveis devem obrigatoriamente
iniciar com uma letra ou sublinhado podem ser
formadas por:

Letras

Nmeros

Sublinhados

Exemplo: um, var, VAR, VAR1, VAR_1, _var. Uma


varivel criada no momento que realizado uma
atribuio.

Variveis

Criao e atribuio de valores

var=esta uma string

var=estaeumastring

var=1

Um detalhe importante: NO PODE EXISTIR


ESPAOS ENTRE OS ELEMENTOS DA
DECLARAO/ATRIBUIO
Quando a string atribuda a varivel possuir
espaos, necessrio a utilizao de aspas duplas
no incio e no final da string.
As variveis so case-sensitive, isto , existe
diferenas entre maiusculas e minusculas.
Exemplo: var, Var, vaR, vAr.

Variveis

Para apresentarmos o contedo de uma varivel,


utilizamos o comando echo conforme mostrado
anteriormente e o smbolo $ na frente do nome da
varivel.
Exemplo

var=esta uma mensagem

echo O contedo da variavel $var

echo O contedo da variavel $var

Para apagar a varivel utilizamos o comando unset

Exemplo

unset var

echo $var

Variveis

Podemos atribuir um valor nulo a uma varivel da


seguinte forma

var=

ou

var=

echo $var

Atravs do comando set, podemos verificar a


existencia de todas as variveis de ambiente. Como
existem muitas variveis de ambiente que sero
abordadas adiante, utilizamos PIPELINE para
realizar a paginao da sada do comando set.
Exemplo

set | more

ou set | pg

Variveis

Mesmo sem o usurio saber, diversas variveis so


criadas para auxiliar o funcionamento da Sesso.
Exemplo de Variveis que so criadas no inicio da
sesso

BASH=/bin/bash

BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]


="1" [4]="release" [5]="i486-slackware-linuxgnu")

BASH_VERSION='2.05b.0(1)-release'

HOME=/root

HOSTNAME=pintagol.fespnet

HOSTTYPE=i486

Variveis

Existem quatro de vriaveis que so utilizadas em uma


Sesso

Variveis definidas por Usurio

Variveis do ambiente do Usurio

So as variveis que criadas no inicio da abertura


da Sesso do usurio, quando executado os arquivos
profile e .profile . Exemplo HOME, USERID, etc.

Variveis de estado de processos

So as variveis definidas pelo usurio durante a


Sesso. Exemplo: var, data

So variveis guardam status de processos


executados na Sesso corrente. Exemplo: $?, $!, etc.

Variveis acessveis como argumentos

So variveis que guardam os valores que so


passados para um Shell Script na forma de
parametros. Exemplo: $1, $#, etc.

Exerccio 3

Definir uma varivel X com o valor 10 e mostrar na


tela
Definir uma varialve XN cujo contedo deve ser
Estou aprendendo Shell Script e a seguir mostrar
na tela
Apagar as variveis X e XN criadas anteriormente

Realizando Clculos

Atravs do prompt do Shell podemos realizar


clculos utilizando o comando expr
Exemplo

expr 2 + 2 (soma)

expr 2 3 (subtrao)

expr 2 \* 3 (multiplicao)

expr 2 % 3 (resto de diviso)

expr 2 / 3 (inteiro da diviso)

A Crase

O caractere crase (`) utilizado quando queremos acessar


a sada padro (guardando um resultado) de um comando
em Shell Script.
Exemplo (1) - echo A soma de 2 + 2 `expr 2 + 2`

A varivel var ser iniciado com o valor 4

Exemplo (3) - hoje=`date +%d/%m/%y`

A soma de

Exemplo (2) - var=`expr 2 + 2`

O resultado ser a string :


2=24

A varivel hoje ser iniciado no formato ddmmaa

Exemplo (4) touch arq.h`date +%H%M%S`

Ser criado o arquivo arq.hhhmmss corrente


(arq.h120144)

Exerccio 4

Mostrar no monitor a soma de 4 e 15

Mostrar no monitor a multiplicao de 4 e 15

Mostrar no monitor a subtrao de 4 e 15

Mostrar no monitor o resto da diviso de 15 por 4

Mostrar no monitor o inteiro de diviso de 15 por 4

Atribuir a varivel X o resto da diviso de 15 por 4

Atribuir a varivel XY o inteiro da diviso de 15 por


4
Atribuir a varivel V a quantidade de arquivos no
diretrio corrente (utilize os comandos ls, wc)

Variveis de Usurio

So inicializadas e referenciadas pelo usurio

Somente o usurio e o Shell sabem de sua existencia

Esto associadas ao Shell que a criou

No automtico a passagem para outro Shell

As variveis no so enviadas para o processo Shell


filho e vice-versa.

Variveis de Usurio

Para verificar o funcionamento do Shell seguir os


passos indicados:

Criar uma varivel V=10

Mostrar o seu contedo echo $V

Escrever o Script abaixo e executar,( ou executar


um novo bash que tem o mesmo efeito )
#!/bin/bash
echo O Valor de V $V

Variveis de Usurio

Como podemos verificar, no foi mostrado o


contudo da varivel V, isso ocorre porque para
execuo do Script, um novo Shell criado
(processo filho) para execuo do Script. A varivel
criada em um Shell no vista em outro.
Para que uma varivel criado em um Shell seja
acessvel para todos Shell Filho, necessrio
utilizar o comando export.

Exemplo: export V

O comando export torna GLOBAL a varivel


Para confirmar o resultado, executar o
procedimento anterior.

Variveis de Ambiente

Todas as variveis de ambiente so definidas no


incio da Sesso do Usurio
Variveis de ambiente comuns a todos os usurios
so encontrados no arquivo /etc/profile
Variveis de ambiente de usurio so encontrados
no arquivo ~HOME/.profile
Primeiro lido o arquivo /etc/profile e depois o
arquivo ~HOME/.profile
Para acessar as variveis do ambiente utilizar o
comando set

Variveis de Processo

$_ - Contm o ltimo comando executado.


$? - Contm o Status retornado pelo ltimo comando
executado
$$ - Nmero de Identificao (PID) do processo
Shell que est sendo executado
$! - Nmero de Identificao (PID) do ltimo
processo executado em background

Variveis de Processo

Exemplos

ls -la

echo $?

(volta 0)

ls -la *.xxxx

(um arquivo que no existe, erro)

echo $?

(volta 1 erro)

ls -la &

(emite um pid, ex. 234)

echo $!

(volta 234)

echo $$

(volta o pid o bash, ex. 245)

ps

(mostra processo bash, ex. 245)

Variveis de Processo

A varivel $? guarda o status de final de execuo


do ltimo comando executado.
Quando executado um Shell Script tambm podemos
modificar esta varivel atravs do comando exit.
Exemplo

#!/bin/bash
exit 3
No prompt de comando aps a execuo no script acima.
$ echo $?

Variveis com Argumentos

So variveis que so utilizadas para referenciar


argumentos passados para um procedimento Shell
Essas variveis so inicializadas pelo Shell na
execuo do comando
As variveis so:

$# - Nmero de parametros posicionais escritos


na linha de comando

$0 Nome do Script que est sendo executado

$1 .... $9 Parmetros posicionais

$* - Lista que contm o conjunto dos argumentos


passados para a rotina Shell.

Variveis Argumento
#!/bin/bash
echo Voce passou $# parametros
echo O parametro zero o nome da rotina que e $0
echo O primeiro parametro $1
echo O segundo parametro $2
echo A lista de parametros $*
Salvar o script com o nome exec0.sh
Executar com o seguintes parametros
bash exec0.sh um dois tres 4 5 6 7 8 9 0 1 2 3

Shift de Argumentos

Como visto anteriormente, podemos acessar


somente nove variveis atravs das variveis $1 e
$9
Se tivermos mais que nove argumentos teremos que
utilizar o shift
O comando shift desloca os argumentos posicionais
de uma posio para a esquerda, ou seja $2 ser
associado para $1, $3 para $2 e assim
sucessivamente.
O comando shift decrementa o valor da varivel $#
e no afeta $0 que contm sempre o nome do
procedimento.

Shift de Argumentos
#!/bin/bash
echo "Voce passou $# parametros"
echo "O parametro zero o nome da rotina que e $0"
echo "O primeiro parametro $1"
echo "O segundo parametro $2"
echo "Estou executando o SHIFT" nas variveis
shift
echo "Agora tenho $# parametros"
echo "O parametro zero o nome da rotina que e $0"
echo "O primeiro parametro $1"
echo "O segundo parametro $2
Salvar o script com o nome exec1.sh
Executar com o seguintes parametros
bash exec1.sh um dois tres 4 5 6 7 8 9 0 1 2 3

Comando Read

Para ler o teclado e armazernar o que foi digitado


em variveis, utilizamos o comando read.
Exemplo: read nome_de_variavel

read var

read varx vary varz

O comando read permite que uma sequencia de


caracteres digitados sejam armazenadas em uma
varivel
A cada espao digitado, o comando read procura a
prxima varivel, at que elas se esgotem, ficando o
restante da linha na ltima varivel.

Comando read
#!/bin/bash
echo -n "digite uma variavel: "
read var1 var2 var3
echo "Primeira variavel --> $var1"
echo "Segunda variavel --> $var2"
echo "Terceira variavel --> $var3
Salvar o script com o nome exec2.sh
Executar o script

Controle de Fluxo

At o momento todos os comandos foram


executamos sequencialmente.
O Shell permite a utilizao de comandos de
controle de fluxo

Deciso

if

case

Repetio

while

for

Condicional
if [ condio ]
then
Se condio verdadeira execute todos os
comandos at fi
...
fi
** condio a comparao entre dois valores
** observar sempre o formato [xcondiox], onde x
corresponde a um espao.

Condicional
if [ condition ]
then
se condio for verdadeira
execute todos os comandos at o else
else
se condio no verdadeira
execute todos os comandos at o fi
fi

Condicional
if condition
then
if condition
then
.....
do this
else
....
do this
fi
else
.....
do this
fi

Condicional
if condition
then

se condio verdadeira
execute todos os comandos at
elif condition1
then
se condition1 verdadeiro
execute todos os comandos at
elif condition2
then
se condition2 verdadeiro
execute todos os comandos at
else
Nenhuma das condies acima
verdadeiras
execute todos os comandos at
fi

elif

elif

elif
so
fi

Operadores de Comparao

Numricos
-eq
-ne
-le
-lt
-ge
-gt

igual
diferente
menor ou igual
menor que
maior ou igual
maior que

Alfanumrico
=
igual
!=
diferente
-z
string sem contedo
-n
string com contudo

Operadores de Comparao
Comparao matemtica
5 == 6
5 != 6
5<6
5 <= 6
5>6
5 >= 6

Comparao em Script
if [ 5 -eq 6 ]
if [ 5 -ne 6 ]
if [ 5 -lt 6 ]
if [ 5 -le 6 ]
if [ 5 -gt 6 ]
if [ 5 -ge 6 ]

Operadores de Condio
Comparao entre String

Significado

if
if
if
if

string1 igual a string2


string1 no igual a string2
string1 nulo e existe
string1 no nul e existe

[
[
[
[

string1 = string2 ]
string1 != string2 ]
-z string1 ]
-n string1 ]

Teste com arquivos e diretrios


Teste
if [ -s arquivo ]
if [ -f arquivo ]
if [ -d arquivo ]
if [ -w arquivo ]
if [ -r arquivo ]
if [ -x arquivo ]

Significado
o arquivo no est vazio
um arquivo normal e no diretrio
um diretrio
um arquivo para gravao
um arquivo read-only
um arquivo executvel

Operadores Lgicos
Operadores lgicos so utilizados para combinar duas ou mais
condies
Operador Lgico

Significado

! expresso
expresso1 -a expresso2
expresso1 -o expresso2

operador lgico NOT


operador lgico AND
operador lgico OR

Controle de Fluxo - Exemplos


O exemplo abaixo ilustra a comparao de valores
numricos.
#!/bin/bash
echo -n "digite a variavel A: "
read var1
echo -n "digite a variavel B: "
read var2
if [ $var1 -eq $var2 ]
then
echo "var1 igual a var2"
else
echo "var1 no igual a var2"
fi

Controle de Fluxo - Exemplo


O exemplo abaixo ilustra a comparao de valores
alfanumricos.
#!/bin/bash
varx="Bom dia"
vary=dia
if [ "$varx" = "Bom dia" -a $vary = dia ]; then
echo "A comparao de String verdadeira"
else
echo "A Comparao de Striong falsa"
fi

Controle de Fluxo - Exemplos


#!/bin/bash
echo -n "digite o nome do arquivo: "
read var1
if [ -f "$var1" ]
then
echo "$var1 um arquivo normal"
if
[ ! -s "$var1" ]; then
echo "Este arquivo est vazio"
else
echo "Este arquivo no est vazio"
fi
if [ -r "$var1" ]; then
echo "O arquivo tem permisso de leitura"
else
echo "O arquivo no tem permisso de leitura"
fi
else
if
[ -d "$var1" ]; then
echo "$var1 um diretrio"
fi
fi

Controle de Fluxo - Exemplo


#!/bin/bash
echo -n "digite o valor do nmero: "
read var1
if [ $var1 -eq 1 ]
then
echo "Vc escolheu o Valor um"
elif [ $var1 -eq 2 ]; then
echo "Vc escolheu o valor dois"
elif [ $var1 -eq 3 ]; then
echo "Vc escolheu o valor trs"
else
echo "Vc escolheu uma opo invlida"
fi

Deciso com Mltiplas


Escolha
case $varivel in
padro1) commando
...
..
commando;;
padro2) command
...
..
commando;;
padroN) commando
...
..
commando;;
*)
commando
...
..
commando;;
esac

Deciso com Mltiplas


Escolhas
#!/bin/bash
echo -e n"Menu de Escolha \n\n"
echo "1 - Incluso "
echo "2 - Consulta"
echo "3 - Excluso"
echo "4 - Alterao"
echo -e "5 - Fim\n"
echo -n "Escolha uma opo -> "
read op
case $op in
1)echo "Vc escolheu a opo Incluso";;
2)echo "Vc escolheu a opo Consulta";;
3)echo "Vc escolheu a opo Excluso";;
4)echo "Vc escolheu a opo Alterao";;
5)echo "Vc escolheu a opo Fim";;
*)echo "Vc escolheu uma opo invlida";;
esac

Deciso com Mltiplas


Escolhas
#!/bin/bash
echo -e n"Menu de Escolha \n\n"
echo " Incluso "
echo " Consulta"
echo " Excluso"
echo " Alterao"
echo -e " Fim\n"
echo -n "Escolha uma opo -> "
read op
case $op in
Inclusao)echo "Vc escolheu a opo Incluso";;
Consulta)echo "Vc escolheu a opo Consulta";;
Exclusao)echo "Vc escolheu a opo Excluso";;
Alteracao)echo "Vc escolheu a opo Alterao";;
Fim) echo "Vc escolheu a opo Fim";;
*)echo "Vc escolheu uma opo invlida";;
esac

Repetio - for
for variable in lista_de_valores
do
Executa todos os comandos para cada elemento da
lista.
Done
Exemplo
#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 0
do
echo $i
done
lista="1 2 3 4 5 6 7 8 9 0"
for i in $lista
do
echo $i
done

Repetio - for
for (( expr1; expr2; expr3 ))
do
repete todos os comandos enquanto
expr2 seja verdadeiro
done
Exemplo:
#!/bin/bash
for ((i = 0; i<= 5; i++ ))
do
echo $i
done

Repetio - while
while [ condio ] ou [ true ] ou [ : ]
do
Todos os comandos sero executados enquanto
a condio verdadeiro.

done

command1
command2
command3
..

Exemplo:
#!/bin/bash
cont=0
while [ $cont -le 40 ]
do
echo $cont
cont=`expr $cont + 1`
done

Repetio

Podemos interferir no processo de repetio


(interromper ou continuar) utilizando os comandos
continue e break.
O comando continue fora uma nova anlise da
condio (volta para o inicio da repetio)
O comando break interrompe definitivamente o lao

Repetio - Continue
#!/bin/bash
numero=0
while [ $numero -lt 11 ]
do
echo -n "Digite um numero de 0 a 10: "
read numero
if [ "$numero" -gt 10 ]
then
continue
fi
if [ "$numero" -lt 11 ]
then
echo "Voce digitou $numero"
fi
done
echo final de procedimento
No exemplo acima, todo nmero digitado entre 0 e 10 ser
apresentado na tela e o lao ser continuado. Quando for
digitado um nmero maior que 10, no meio do procedimento, o
lao desviado para o incio e a seguir encerrado.

Repetio - break
#!/bin/bash
numero=0
while [ $numero -lt 11 ]
do
echo -n "Digite um numero de 0 a 10: "
read numero
if [ "$numero" -gt 10 ]
then
break
fi
if [ "$numero" -lt 11 ]
then
echo "Voce digitou $numero"
fi
done
echo final de procedimento
No exemplo acima, todo nmero digitado entre 0 e 10 ser
apresentado na tela e o lao ser continuado. Quando for
digitado um nmero maior que 10, no meio do procedimento, o
lao encerrado.

Execuo condicional

Os operadores && (and) e || (or) condicionam a


execuo de um comando com base na finalizao
de um comando anteriormente executado.
Sintaxe

comando1 && comando2

comando2 ser executado somente se comando1


retornar um status de sada igual a zero ($? = 0)

comando1 || comando2

Comando2 ser executado somente se comando1


retornar um status de sada diferente de zeros
($? != 0 )

Execuo Condicional

ls *.txt && echo Achei os arquivos procurados


No exemplo acima, se existir algum arquivo com a
extenso txt, ser mostrado a mensagem, caso
contrrio nada ser mostrado
ls *.txt || echo No achei os arquivos procurados
No exemplo acima, se no existir arquivos com a
extenso txt, ser mostrado a mensagem, caso
contrrio nada ser mostrado.
ls *.txt && echo Achei os arquivos procurados ||
echo No achei os arquivos procurados
O exemplo acima une as duas contrues
apresentadas anteriormente.

Funes

Uma funo um conjunto de comandos que


realizam uma tarefa nica.
O Shell permite a criao de funes que so
chamadas durante a execuo do script
Sintaxe:
nome_de_funo ()
{
comando1
comando2
comando3
...
return
}

Funes
#!/bin/bash
function mostra_valores()
{
echo "Valor1: $var1"
echo "Valor2: $var2"
return
}
function mostra_soma()
{
echo "$var1 + $var2 = `expr $var1 + $var2`"
return
}
# Call the function
clear
echo -n "Valor 1: "
read var1
echo -n "valor 2: "
read var2
mostra_valores; mostra_soma

Funes Passagem de
Parametros
#!/bin/bash
function demo()
{
echo "Todos os argumentos da funo demo(): $*"
echo "Primeiro argumento - $1"
echo "Segundo argumento - $2"
echo "Terceiro argumento - $3"
return
}
#
# Chamada da funo
#
demo -f foo bar

Retorno de Valor
#!/bin/bash
function cal()
{
n1=$1
op=$2
n2=$3
ans=0
if [ $# -eq 3 ]; then
ans=`expr $n1 $op $n2 ))
echo "$n1 $op $n2 = $ans"
return $ans
else
echo "Funo cal necessita de trs argumentos"
fi
return
}
#chamada de funo
cal 5 + 10
cal 10 - 2
cal 10 / 2
echo $?

Funes - Observao

Variveis em Shell Scripts so globais


Passagem de parametros obedece as variveis de
ambiente $1 a $9
O valor retornado de uma funo armazenado na
varivel de processo $?

RESPOSTAS
Exerccio 1.
find / -amin 10 > hoje.txt &
find / -iname "*.cfg" > cfg.txt &
cat < hoje.txt > total.txt
cat < cfg.txt >> total.txt
Exerccio 2.
ls -la | more
who | sort
who | wc -l
cat < /etc/passwd | sort
cat < /etc/passwd | sort > cadastro.txt
who | grep raul

Respostas

Exerccio 3

X=10

Echo $X

XN=Estou aprendendo Shell Script

Echo $XN

Unset X

Unset XN

Respostas

Exerccio 4.

echo `expr 4 + 15`

echo `expr 4 \* 15`

echo `expr 4 - 15`

echo `expr 15 % 4`

echo `expr 15 / 4`

X=`expr 15 % 4 `

XY=`expr 15 / 4 `

V=`ls -la | wc -l`

Você também pode gostar