Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Introducao Shell PDF
Apostila Introducao Shell PDF
Abril de 2004
Introduo ao Shell Script Aurlio Marinho Jargas
ndice
Sobre o Curso.......................................................................................................................1
Apresentao........................................................................................................................2
O Que o Shell...........................................................................................................2
Shell Script...................................................................................................................2
Antes de Comear.......................................................................................................3
Rebobinando a fita...............................................................................................................8
Variveis......................................................................................................................8
Detalhes Sobre os Comandos.....................................................................................8
O comando test.........................................................................................................10
TAREFA: Script que testa arquivos...........................................................................11
Conceitos Avanados........................................................................................................12
Recebimento de opes e parmetros......................................................................12
Expresses Aritmticas.............................................................................................12
If, For e While............................................................................................................13
Exerccios...........................................................................................................................15
Mais Informaes...............................................................................................................18
i
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.
PrRequisitos
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
1
Apresentao
O Que o Shell
O Shell o "prompt" da linha de comando do Linux, o servo que recebe os comandos
digitados pelo usurio e os executa.
O Shell aquele que aparece logo aps se digitar a senha do usurio e entrar na tela preta
do Linux. Ou na interface grfica, ao clicar no cone do Xterm ou do rxvt.
Ali est o Shell, esperando ansiosamente por algum comando para ele poder executar.
Essa a sua funo: esperar e executar. Cada comando digitado lido, checado,
interpretado e enviado ao Sistema Operacional para ser de fato executado.
Funcionando como uma ponte, o Shell a ligao entre o usurio e o kernel. O kernel
quem acessa o hardware da mquina, como disco rgido, placa de vdeo e modem. Por
exemplo, para o usurio acessar um arquivo qualquer, toda esta hierarquia seguida:
Mas o Shell muito mais poderoso que seu primo distante. Alm dos comandos bsicos
para navegar entre diretrios e manipular arquivos, ele tambm possui todas as estruturas
de uma linguagem de programao, como IF, FOR, WHILE, variveis e funes. Com isso,
tambm possvel usar o Shell para fazer Scripts e automatizar tarefas.
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.
2
Introduo ao Shell Script Aurlio Marinho Jargas
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:
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.
3
O Primeiro Shell Script
O primeiro Shell Script a fazer ser o "sistema" do exemplo anterior, de simplesmente
juntar trs comandos num mesmo script.
Para que o script possa ser executado de qualquer parte do sistema, movao para um
diretrio que esteja no seu PATH. Para ver quais so estes diretrios, use o comando:
echo $PATH
Use o VI ou outro editor de textos de sua preferncia para colocar todos os comandos
dentro do arquivo.
#!/bin/bash
Para que ao ser executado, o sistema saiba que o Shell quem ir interpretar estes
comandos.
Use o seguinte comando para que seu script seja reconhecido pelo sistema como um
comando executvel:
chmod +x sistema
4
Introduo ao Shell Script Aurlio Marinho Jargas
"Comando no encontrado"
Verifique se o comando que voc est chamando tem exatamente o mesmo nome
do seu script. Lembrese que no Linux as letras maisculas e minsculas so
diferentes, ento o comando "SISTEMA" diferente do comando "sistema".
Caso o nome esteja correto, verifique se ele est no PATH do sistema. O comando
"echo $PATH" mostra quais so os diretrios conhecidos, mova seu script para
dentro de um deles, ou chameo passando o caminho completo.
prompt$ ./sistema
prompt$ /tmp/scripts/sistema
"Permisso Negada"
"Erro de Sintaxe"
Um script s executado quando sua sintaxe est 100% correta. Verifique os seus
comandos, geralmente o erro algum IF ou aspas que foram abertos e no foram
fechados. A prpria mensagem informa o nmero da linha onde o erro foi
encontrado.
5
O Primeiro Shell Script Melhorado
Nesse ponto, voc j sabe o bsico necessrio para fazer um script em Shell do zero e
executlo. Mas apenas colocar os comandos num arquivo no torna este script til.
Vamos fazer algumas melhorias nele para que fique mais compreensvel.
O comando "echo" serve para mostrar mensagens na tela. Que tal anunciar cada
comando antes de executlo?
#!/bin/bash
echo "Data e Horrio:"
date
echo
echo "Uso do disco:"
df
echo
echo "Usurios conectados:"
w
Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for colocado, uma
linha em branco mostrada.
#!/bin/bash
echo "Vou buscar os dados do sistema. Posso continuar? [sn] "
read RESPOSTA
test "$RESPOSTA" = "n" && exit
echo "Data e Horrio:"
date
echo
echo "Uso do disco:"
df
echo
echo "Usurios conectados:"
w
O comando "read" leu o que o usurio digitou e guardou na varivel RESPOSTA. Logo
em seguida, o comando "test" checou se o contedo dessa varivel era "n". Se
6
Introduo ao Shell Script Aurlio Marinho Jargas
afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha h vrios
detalhes importantes:
#!/bin/bash
# sistema script que mostra informaes sobre o sistema
# Autor: Fulano da Silva
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 se ter uma viso geral do que o script faz, sem
precisar decifrar seu cdigo.
7
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, usase o "echo":
prompt$ HOJE=$(date)
prompt$ echo "Hoje : $HOJE"
Hoje : Sb Abr 24 18:40:00 BRT 2004
prompt$ unset HOJE
prompt$ echo $HOJE
prompt$
Para ver quais as variveis que o Shell j define por padro, use o comando
"env"
8
Introduo ao Shell Script Aurlio Marinho Jargas
H vrios comandos que foram feitos para serem usados com o Shell, so como
ferramentas. Alguns deles:
Use "man comando" ou "comando help" para obter mais informaes sobre
cada um deles.
9
Introduo ao Shell Script Aurlio Marinho Jargas
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.
O comando test
O canivete suo dos comandos do Shell o "test", que consegue fazer vrios tipos de
checagens, em nmeros, textos e arquivos. Ele possui vrias opes para indicar que tipo
de teste ser feito, algumas delas:
10
Introduo ao Shell Script Aurlio Marinho Jargas
prompt$ testaarquivos
Digite o arquivo: /naoexiste
O arquivo '/naoexiste' no foi encontrado
prompt$ testaarquivos
Digite o arquivo: /tmp
/tmp um diretrio
prompt$ testaarquivos
Digite o arquivo: /etc/passwd
/etc/passwd um arquivo
prompt$
11
Conceitos Avanados
At agora vimos o bsico, o necessrio para se fazer um script de funcionalidade mnima.
A seguir, conceitos novos que ampliaro as fronteiras de seus scripts!
#!/bin/sh
# argumentos mostra o valor das variveis especiais
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.
12
Introduo ao Shell Script Aurlio Marinho Jargas
if test "$VARIAVEL" gt 10
then
echo " maior que 10"
else
echo " menor que 10"
fi
if [ "$VARIAVEL" gt 10 ]
then
echo " maior que 10"
else
echo " menor que 10"
fi
13
Introduo ao Shell Script Aurlio Marinho Jargas
E por fim, o for percorre uma lista de palavras, pegando uma por vez:
Uma ferramenta muito til para usar com o for o seq, que gera uma seqncia
numrica. Para fazer o loop andar 10 passos, podese fazer:
i=0
while test i le 10
do
i=$((i+1))
echo "Contando: $i"
done
while :
do
if test f /tmp/lock
then
echo "Aguardando liberao do lock..."
sleep 1
else
break
fi
done
14
Exerccios
A melhor parte do curso finalmente chegou, agora a sua vez de se divertir. Seguem
alguns exerccios que podem ser resolvidos usando o que foi aprendido no curso.
Exerccio 1 relacao.sh
Recebe dois nmeros como parmetro e mostra a relao entre eles. Exemplo:
prompt$ ./relacao.sh 3 5
3 menor 5
prompt$ ./relacao.sh 5 3
5 maior 3
prompt$ ./relacao.sh 5 5
5 igual 5
Exerccio 2 zerador.sh
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
Exerccio 3 substring.sh
Recebe duas palavras como parmetro e checa se a primeira palavra est contida
dentro da segunda. S mostra mensagem informativa em caso de sucesso, do
contrrio no mostra nada. Exemplo:
15
Introduo ao Shell Script Aurlio Marinho Jargas
Exerccio 4 juntatudo.sh
Exerccio 5 users.sh
prompt$ ./users.sh
ftp FTP User
nobody Nobody
named Domain name server
xfs X Font Server
mysql MySQL server
aurelio Aurelio Marinho Jargas
Exerccio 6 shells.sh
prompt$ ./shells.sh
/bin/bash
/bin/false
/bin/sync
/sbin/halt
/sbin/shutdown
16
Introduo ao Shell Script Aurlio Marinho Jargas
Exerccio 7 parametros.sh
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
17
Mais Informaes
Livro Programao Shell Linux, 3 Edio
Autoria de Julio Cezar Neves, Editora Brasport, ISBN 8574521183
Pgina do instrutor sobre Shell Script, com links para vrios outros materiais
http://aurelio.net/shell
18
Respostas dos Exerccios
testaarquivos
#!/bin/bash
relacao.sh
#!/bin/sh
if [ $1 eq $2 ]; then
echo "$1 igual $2"
elif [ $1 lt $2 ]; then
echo "$1 menor $2"
else
echo "$1 maior $2"
fi
zerador.sh
#!/bin/bash
i=$1
while [ $i ge 0 ]; do
echo n "$i "
i=$((i1))
done
echo
substring.sh
#!/bin/sh
[ $# ne 2 ] && exit
echo $2 | grep qs $1 && echo "$1 est contida em $2"
juntatudo.sh
#!/bin/sh
19
Introduo ao Shell Script Aurlio Marinho Jargas
users.sh
#!/bin/sh
shells.sh
#!/bin/sh
cat /etc/passwd | cut d : f 7 | sort | uniq
parametros.sh
#!/bin/bash
i=0
while [ "$1" ] ; do
i=$((i+1))
echo "Parmetro $i: $1"
shift
done
20