Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Introducao Shell PDF
Apostila Introducao Shell PDF
http://aurelio.net
Introduo ao Shell Script - Aurlio Marinho Jargas
ndice
Sobre o curso.......................................................................................................................1
Apresentao........................................................................................................................2
O que o shell............................................................................................................2
Shell script...................................................................................................................3
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
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.
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
1
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.
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.
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.
2
Introduo ao Shell Script - Aurlio Marinho Jargas
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:
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 em um mesmo script.
Para que o script possa ser executado de qualquer parte do sistema, mova-o para um
diretrio que esteja no seu PATH. Para ver quais so estes diretrios, use o comando:
echo $PATH
Use o nano, 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. Lembre-se que no Unix/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 chame-o 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
execut-lo. Mas apenas colocar os comandos em um 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 execut-lo?
#!/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" verificou se o contedo dessa varivel era "n". Se afirmativo, o
6
Introduo ao Shell Script - Aurlio Marinho Jargas
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 ter-se 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, usa-se 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
testes 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$ testa-arquivos
Digite o arquivo: /naoexiste
O arquivo '/naoexiste' no foi encontrado
prompt$ testa-arquivos
Digite o arquivo: /tmp
/tmp um diretrio
prompt$ testa-arquivos
Digite o arquivo: /etc/passwd
/etc/passwd um arquivo
prompt$
11
Conceitos mais 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 [ "$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, pode-se 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 finalmente chegou, agora a sua vez de se divertir. Seguem alguns
exerccios que podem ser resolvidos usando o que foi aprendido at aqui.
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
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:
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
prompt$
Exerccio 6 - shells.sh
prompt$ ./shells.sh
/bin/bash
/bin/false
/bin/sync
/sbin/halt
/sbin/shutdown
prompt$
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
prompt$
17
Mais informaes
Livro Programao Shell Linux
Autoria de Julio Cezar Neves, Editora Brasport, ISBN 85-7452-118-3
Pgina do instrutor sobre Shell Script, com links para vrios outros materiais
http://aurelio.net/shell
18
Respostas dos exerccios
Resista tentao de olhar as respostas antes de tentar fazer os exerccios! na prtica
que se consolida os conhecimentos aprendidos, no pule este passo. Seja forte, insista,
no desista!
testa-arquivos
#!/bin/bash
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
Introduo ao Shell Script - Aurlio Marinho Jargas
substring.sh
#!/bin/bash
juntatudo.sh
#!/bin/bash
users.sh
#!/bin/bash
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