Sei sulla pagina 1di 16

Curso Basico Shell Script

Israel Filho israel.filho@ifrn.edu.br

O shell Shell script

O shell o "prompt" da linha de comando do Unix e Linux, 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.

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 Para os usurios do Windows, fcil pensar no shell como um MSDOS melhorado. Ao invs do C:\> aparece um [root@localhost root]#, mas o funcionamento similar. Basta digitar um comando, suas opes e apertar a ENTER que ele ser executado.

O comando deve estar no PATH, mensagens de aviso so mandadas para a tela e Ctrl+C interrompe o funcionamento. Isso tudo igual em ambos. 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. Este ser o nosso foco: scripts em shell.

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 #!/bin/bash date df w [root@localhost root]# sistema

1. Escolher um nome para o script. J temos um nome: sistema. Use apenas letras minsculas e evite acentos, smbolos e espao em branco 2. Escolher o diretrio onde colocar o 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

Se no tiver permisso de mover para um diretrio do PATH, deixe-o dentro de seu diretrio pessoal ($HOME).

3. Criar o arquivo e colocar nele os comandos Use o nano, VI ou outro editor de textos de sua preferncia para colocar todos os comandos dentro do arquivo. 4. Colocar a chamada do shell na primeira linha A primeira linha do script deve ser: #!/bin/bash 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

Executar os trs comandos seguidos resulta em um bolo de texto na tela, misturando as informaes e dificultando o entendimento. preciso trabalhar um pouco a sada do script, tornando-a mais legvel. O comando "echo" serve para mostrar mensagens na tela. Que tal anunciar cada comando antes de execut-lo? Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for colocado, uma linha em branco mostrada. #!/bin/bash
echo "Data e Horrio:" date echo echo "Uso do disco:" df echo echo "Usurios conectados:" w

Para o script ficar mais completo, vamos colocar uma interao mnima com o usurio, pedindo uma confirmao antes de executar os comandos.
#!/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 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 "||"

Com o tempo, o script vai crescer, mais comandos vo ser adicionados e quanto maior, mais difcil encontrar o ponto certo onde fazer a alterao ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenes futuras, preciso deixar o cdigo visualmente mais agradvel e espaado, e colocar comentrios esclarecedores. 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.

#!/bin/bash # sistema - script que mostra informaes sobre o sistema # Autor: Fulano da Silva # Pede uma confirmao do usurio antes de executar echo "Vou buscar os dados do sistema. Posso continuar? [sn] " read RESPOSTA # Se ele digitou 'n', vamos interromper o script test "$RESPOSTA" = "n" && exit # O date mostra a data e a hora correntes echo "Data e Horrio:" date echo # O df mostra as parties e quanto cada uma ocupa no disco echo "Uso do disco:" df echo # O w mostra os usurios que esto conectados nesta mquina echo

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$ VARIAVEL="um dois tres" prompt$ echo $VARIAVEL um dois tres prompt$ echo $VARIAVEL $VARIAVEL um dois tres um dois tres prompt$

No podem haver espaos ao redor do igual "=" Ainda possvel armazenar a sada de um comando dentro de uma varivel. Ao invs de aspas, o comando deve ser colocado entre "$(...)", veja:
prompt$ HOJE=$(date) prompt$ echo "Hoje : $HOJE" Hoje : Sb Abr 24 18:40:00 BRT 2004 prompt$ unset HOJE prompt$ echo $HOJE prompt$

E finalmente, o comando "unset" apaga uma varivel. Para ver quais as variveis que o shell j define por padro, use o comando "env"

Detalhes sobre os comandos


Diferente de outras linguagens de programao, o shell no usa os parnteses para separar o comando de seus argumentos, mas sim o espao em branco. O formato de um comando sempre: COMANDO OPES PARMETROS O comando "cat" mostra o contedo de um arquivo. O comando "cat -n sistema" mostra o nosso script, com as linhas numeradas. O "-n" a opo para o comando, que o instrui a numerar linhas, e "sistema" o ltimo argumento, o nome do arquivo.

Potrebbero piacerti anche