Escolar Documentos
Profissional Documentos
Cultura Documentos
ndice
Sobre o curso.......................................................................................................................1
Apresentao........................................................................................................................2
O que o shell............................................................................................................2
Shell script...................................................................................................................3
Antes de comear........................................................................................................3
O primeiro shell script.........................................................................................................4
Passos para criar um shell script.................................................................................4
Problemas na execuo do script................................................................................5
O primeiro shell script (melhorado)....................................................................................6
Melhorar a sada na tela..............................................................................................6
Interagir com o usurio................................................................................................6
Melhorar o cdigo do script.........................................................................................7
Rebobinando a fita...............................................................................................................8
Variveis......................................................................................................................8
Detalhes sobre os comandos......................................................................................8
O comando test.........................................................................................................10
Tarefa: script que testa arquivos...............................................................................11
Conceitos mais avanados...............................................................................................12
Recebimento de opes e parmetros......................................................................12
Expresses aritmticas..............................................................................................12
If, for e while..............................................................................................................13
Exerccios...........................................................................................................................15
Mais informaes...............................................................................................................18
Respostas dos exerccios.................................................................................................19
testa-arquivos............................................................................................................19
relacao.sh..................................................................................................................19
zerador.sh..................................................................................................................19
substring.sh...............................................................................................................20
juntatudo.sh...............................................................................................................20
users.sh.....................................................................................................................20
shells.sh.....................................................................................................................20
parametros.sh............................................................................................................20
Sobre o curso
Nome
Introduo a Shell Scripts
Instrutor
Aurlio Marinho Jargas (http://aurelio.net)
Objetivo
Ensinar aos alunos todos os conceitos necessrios para poderem fazer sozinhos
scripts simples em shell.
Pr-Requisitos
Noes bsicas de informtica e operao do sistema pela linha de comando.
desejado, porm no obrigatrio, noes bsicas de programao.
Pblico Alvo
Desenvolvedores, administradores de sistemas, programadores e interessados em
geral.
Durao
8 horas
Apresentao
O que o shell
O shell o "prompt" da linha de comando do Unix e Linux, o servo que recebe os
comandos digitados pelo usurio e os executa.
O shell aquele que aparece logo aps digitar-se a senha do usurio e entrar na tela
preta. Ou na interface grfica, ao clicar no cone do Xterm, rxvt, Terminal ou Console.
localhost login: root
Password:
Last login: Fri Apr 16 01:57:28 on tty5
[root@localhost root]# _
Ali est o shell, esperando ansiosamente por algum comando para ele poder executar.
Essa a sua funo: esperar e executar. Cada comando digitado lido, verificado,
interpretado e enviado ao sistema operacional para ser de fato executado.
No Mac OS X, o shell est em Aplicativos > Utilitrios > Terminal. No Windows
preciso instal-lo com o Cygwin.
Funcionando como uma ponte, o shell a ligao entre o usurio e o kernel. O kernel
quem acessa os equipamentos (hardware) da mquina, como disco rgido, placa de vdeo
e modem. Por exemplo, para o usurio ler um arquivo qualquer, toda esta hierarquia
seguida:
USURIO --> SHELL --> KERNEL --> DISCO RGIDO
Shell script
Um script um arquivo que guarda vrios comandos e pode ser executado sempre que
preciso. Os comandos de um script so exatamente os mesmos que se digita no prompt,
tudo shell.
Por exemplo, se de tempos em tempos voc quer saber informaes do sistema como
horrio, ocupao do disco e os usurios que esto logados, preciso digitar trs
comandos:
[root@localhost root]# date
[root@localhost root]# df
[root@localhost root]# w
melhor fazer um script chamado "sistema" e colocar estes comandos nele. O contedo
do arquivo "sistema" seria o seguinte:
#!/bin/bash
date
df
w
Isso um shell script. Um arquivo de texto que contm comandos do sistema e pode ser
executado pelo usurio.
Antes de comear
Se voc est acessando o sistema como usurio administrador (root), saia e entre como
um usurio normal. muito perigoso estudar shell usando o superusurio, voc pode
danificar o sistema com um comando errado.
Se voc no tem certeza qual o seu usurio, use o comando "whoami" para
saber
Como o prompt de usurio normal diferente para cada um, nos exemplos seguintes ser
usado "prompt$" para indicar o prompt da linha de comando.
Para que ao ser executado, o sistema saiba que o shell quem ir interpretar estes
comandos.
5. Tornar o script um arquivo executvel
Use o seguinte comando para que seu script seja reconhecido pelo sistema como um
comando executvel:
chmod +x sistema
"Comando no encontrado"
"Permisso Negada"
"Erro de Sintaxe"
Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for colocado, uma
linha em branco mostrada.
O comando "read" leu o que o usurio digitou e guardou na varivel RESPOSTA. Logo em
seguida, o comando "test" verificou se o contedo dessa varivel era "n". Se afirmativo, o
6
comando "exit" foi chamado e o script foi finalizado. Nessa linha h vrios detalhes
importantes:
O contedo da varivel acessado colocando-se um cifro "$" na frente
O comando test til para fazer vrios tipos de verificaes em textos e arquivos
O operador lgico "&&", s executa o segundo comando caso o primeiro tenha sido
OK. O operador inverso o "||"
Basta iniciar a linha com um "#" e escrever o texto do comentrio em seguida. Estas linhas
so ignoradas pelo shell durante a execuo. O cabealho com informaes sobre o script
e seu autor tambm importante para ter-se uma viso geral do que o script faz, sem
precisar decifrar seu cdigo.
Tambm possvel colocar comentrios no meio da linha # como este
Rebobinando a fita
Agora hora de fixar alguns dos conceitos vistos no script anterior.
Variveis
As variveis so a base de qualquer script. dentro delas que os dados obtidos durante a
execuo do script sero armazenados. Para definir uma varivel, basta usar o sinal de
igual "=" e para ver seu valor, usa-se o "echo":
prompt$
prompt$
um dois
prompt$
um dois
prompt$
HOJE=$(date)
echo "Hoje : $HOJE"
Sb Abr 24 18:40:00 BRT 2004
unset HOJE
echo $HOJE
prompt$
OPES
PARMETROS
Funo
Opes teis
cat
Mostra arquivo
-n, -s
cut
Extrai campo
-d -f, -c
date
Mostra data
-d, +'...'
find
Encontra arquivos
grep
Encontra texto
head
Mostra Incio
-n, -c
printf
Mostra texto
nenhuma
rev
Inverte texto
nenhuma
sed
Edita texto
-n, s/isso/aquilo/, d
seq
Conta Nmeros
-s, -f
sort
Ordena texto
tail
Mostra Final
-n, -c, -f
Transforma texto
tr
uniq
wc
Use "man comando" ou "comando --help" para obter mais informaes sobre
cada um deles.
O cat mostra o arquivo todo, o grep pega essa sada e extrai apenas as linhas que contm
a palavra "root" e o cut por sua vez, somente nessas linhas que o grep achou, extrai os 10
primeiros caracteres. Isso funciona como uma estao de tratamento de gua, onde ela
entra suja, vai passando por vrios filtros que vo tirando as impurezas e sai limpa no final.
E por fim, tambm possvel redirecionar a sada de um comando para um arquivo ao
invs da tela, usando o operador ">". Para guardar a sada do comando anterior no arquivo
"saida", basta fazer:
prompt$ cat /etc/passwd | grep root | cut -c1-10 > saida
prompt$ cat saida
root:x:0:0
operator:x
prompt$
O comando test
O canivete suo dos comandos do shell o "test", que consegue fazer vrios tipos de
testes em nmeros, textos e arquivos. Ele possui vrias opes para indicar que tipo de
teste ser feito, algumas delas:
Testes em variveis
Testes em arquivos
-d um diretrio
-f um arquivo normal
String igual
!= String diferente
-n String no nula
-a E lgico (AND)
-z String nula
-o OU lgico (OR)
10
11
O acesso direto, basta referenciar a varivel que o valor j estar definido. Assim
possvel criar scripts que tenham opes como --help, --version e outras.
Expresses aritmticas
O shell tambm sabe fazer contas. A construo usada para indicar uma expresso
aritmtica "$((...))", com dois parnteses.
prompt$
6
prompt$
8
prompt$
prompt$
88
prompt$
prompt$
45
echo $((2*3))
echo $((2*3-2/2+3))
NUM=44
echo $((NUM*2))
NUM=$((NUM+1))
echo $NUM
12
while COMANDO
do
comandos
done
13
E por fim, o for percorre uma lista de palavras, pegando uma por vez:
for numero in um dois trs quatro cinco
do
echo "Contando: $numero"
done
Uma ferramenta muito til para usar com o for o seq, que gera uma seqncia numrica.
Para fazer o loop andar 10 passos, pode-se fazer:
for passo in $(seq 10)
14
Exerccios
A melhor parte finalmente chegou, agora a sua vez de se divertir. Seguem alguns
exerccios que podem ser resolvidos usando o que foi aprendido at aqui.
Alguns exigiro pesquisa e necessitaro de algumas ferramentas que foram apenas
citadas, mas no aprendidas. O shelleiro tambm tem que aprender a se virar sozinho!
Exerccio 1 - relacao.sh
Recebe dois nmeros como parmetro e mostra a relao entre eles. Exemplo:
prompt$ ./relacao.sh 3 5
3 menor que 5
prompt$ ./relacao.sh 5 3
5 maior que 3
prompt$ ./relacao.sh 5 5
5 igual a 5
prompt$
Exerccio 2 - zerador.sh
Recebe um nmero como parmetro e o diminui at chegar a zero, mostrando na
tela cada passo, em uma mesma linha. Exemplo:
prompt$ ./zerador.sh 5
5 4 3 2 1 0
prompt$ ./zerador.sh 10
10 9 8 7 6 5 4 3 2 1 0
prompt$
Exerccio 3 - substring.sh
Recebe duas palavras como parmetro e verifica se a primeira palavra est contida
dentro da segunda. S mostra mensagem informativa em caso de sucesso, do
contrrio no mostra nada. Exemplo:
prompt$ ./substring.sh ana banana
ana est contida em banana
prompt$ ./substring.sh banana maria
prompt$ ./substring.sh banana
prompt$ ./substring.sh
prompt$
15
Exerccio 4 - juntatudo.sh
Mostra na tela "grudados" todos os parmetros recebidos na linha de comando,
como uma nica palavra. Exemplo:
prompt$ ./juntatudo.sh a b c d e f verde azul
abcdefverdeazul
prompt$
./users.sh
FTP User
Nobody
Domain name server
X Font Server
MySQL server
Aurelio Marinho Jargas
16
Exerccio 7 - parametros.sh
Mostra na tela todos os parmetros recebidos na linha de comando, contando-os.
Exemplo:
prompt$ ./parametros.sh a b c d e f
Parmetro 1: a
Parmetro 2: b
Parmetro 3: c
Parmetro 4: d
Parmetro 5: e
Parmetro 6: f
prompt$
17
Mais informaes
Livro Programao Shell Linux
Autoria de Julio Cezar Neves, Editora Brasport, ISBN 85-7452-118-3
Livro BASH - Guia de Consulta Rpida
Autoria de Joel Saade, Editora Novatec, ISBN 85-7522-006-3
Lista de discusso nacional sobre Shell Script
http://br.groups.yahoo.com/group/shell-script
Pgina do instrutor sobre Shell Script, com links para vrios outros materiais
http://aurelio.net/shell
18
testa-arquivos
#!/bin/bash
echo -n "Digite o arquivo: "
read ARQUIVO
test -d "$ARQUIVO" && echo "$ARQUIVO um diretrio"
test -f "$ARQUIVO" && echo "$ARQUIVO um arquivo"
test -f "$ARQUIVO" -o -d "$ARQUIVO" || echo "O arquivo '$ARQUIVO' no foi encontrado"
echo
relacao.sh
#!/bin/bash
if test $1 -eq $2
then
echo "$1 igual a $2"
elif test $1 -lt $2
then
echo "$1 menor que $2"
else
echo "$1 maior que $2"
fi
zerador.sh
#!/bin/bash
i=$1
while test $i -ge 0
do
echo -n "$i "
i=$((i-1))
done
echo
19
substring.sh
#!/bin/bash
test $# -ne 2 && exit
echo $2 | grep -qs $1 && echo "$1 est contida em $2"
juntatudo.sh
#!/bin/bash
echo $* | tr -d ' '
users.sh
#!/bin/bash
cat /etc/passwd | cut -d : -f 1,5 | tr : '\t'
shells.sh
#!/bin/bash
cat /etc/passwd | cut -d : -f 7 | sort | uniq
parametros.sh
#!/bin/bash
i=0
while test "$1"
do
i=$((i+1))
echo "Parmetro $i: $1"
shift
done
20