














Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Apostila de introdução ao Shell Script
Tipologia: Notas de estudo
1 / 22
Esta página não é visível na pré-visualização
Não perca as partes importantes!















Introdução ao Shell Script - Aurélio Marinho Jargas
O shell é o "prompt" da linha de comando do Unix e Linux, é o servo que recebe os comandos digitados pelo usuário e os executa.
O shell é aquele que aparece logo após digitar-se a senha do usuário e entrar na tela preta. Ou na interface gráfica, ao clicar no ícone do Xterm, rxvt, Terminal ou Console.
localhost login: root Password:
Last login: Fri Apr 16 01:57:28 on tty [root@localhost root]# _
Ali está o shell, esperando ansiosamente por algum comando para ele poder executar. Essa é a sua função: 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 > Utilitários > Terminal. No Windows é preciso instalá-lo com o Cygwin.
Funcionando como uma ponte, o shell é a ligação entre o usuário e o kernel. O kernel é quem acessa os equipamentos (hardware) da máquina, como disco rígido, placa de vídeo e modem. Por exemplo, para o usuário ler um arquivo qualquer, toda esta hierarquia é seguida:
Para os usuários do Windows, é fácil pensar no shell como um MSDOS melhorado. Ao invés do C:> aparece um [root@localhost root]#, mas o funcionamento é similar. Basta digitar um comando, suas opções e apertar a ENTER que ele será executado. O comando deve estar no PATH, mensagens de aviso são 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. Além dos comandos básicos para navegar entre diretórios e manipular arquivos, ele também possui todas as estruturas de uma linguagem de programação, como IF, FOR, WHILE, variáveis e funções. Com isso, também é possível usar o shell para fazer scripts e automatizar tarefas.
Este será o nosso foco: scripts em shell.
Um script é um arquivo que guarda vários comandos e pode ser executado sempre que preciso. Os comandos de um script são exatamente os mesmos que se digita no prompt, é tudo shell.
Por exemplo, se de tempos em tempos você quer saber informações do sistema como horário, ocupação do disco e os usuários que estão logados, é preciso digitar três 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 conteúdo do arquivo "sistema" seria o seguinte:
#!/bin/bash date df w
E para chamar este script, basta agora executar apenas um comando:
[root@localhost root]# sistema
Isso é um shell script. Um arquivo de texto que contém comandos do sistema e pode ser executado pelo usuário.
Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.
Se você não tem certeza qual o seu usuário, use o comando "whoami" para saber
Como o prompt de usuário normal é diferente para cada um, nos exemplos seguintes será usado " prompt$ " para indicar o prompt da linha de comando.
Introdução ao Shell Script - Aurélio Marinho Jargas
"Comando não encontrado"
O shell não encontrou o seu script.
Verifique se o comando que você está chamando tem exatamente o mesmo nome do seu script. Lembre-se que no Unix/Linux as letras maiúsculas e minúsculas são diferentes, então 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 são os diretórios conhecidos, mova seu script para dentro de um deles, ou chame-o passando o caminho completo.
Se o script estiver no diretório corrente, chame-o com um "./" na frente, assim:
prompt$ ./sistema
Caso contrário, especifique o caminho completo desde o diretório raiz:
prompt$ /tmp/scripts/sistema
"Permissão Negada"
O shell encontrou seu script, mas ele não é executável.
Use o comando "chmod +x seu-script" para torná-lo um arquivo executável.
"Erro de Sintaxe"
O shell encontrou e executou seu script, porém ele tem erros.
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 não foram fechados. A própria mensagem informa o número da linha onde o erro foi encontrado.
Introdução ao Shell Script - Aurélio Marinho Jargas
Nesse ponto, você já sabe o básico necessário para fazer um script em shell do zero e executá-lo. Mas apenas colocar os comandos em um arquivo não torna este script útil. Vamos fazer algumas melhorias nele para que fique mais compreensível.
Executar os três comandos seguidos resulta em um bolo de texto na tela, misturando as informações e dificultando o entendimento. É preciso trabalhar um pouco a saída do script, tornando-a mais legível.
O comando "echo" serve para mostrar mensagens na tela. Que tal anunciar cada comando antes de executá-lo?
#!/bin/bash echo "Data e Horário:" date echo echo "Uso do disco:" df echo echo "Usuários conectados:" w
Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for colocado, uma linha em branco é mostrada.
Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação 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 Horário:" date echo echo "Uso do disco:" df echo echo "Usuários conectados:" w
O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o
Agora é hora de fixar alguns dos conceitos vistos no script anterior.
As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, 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$
Não podem haver espaços ao redor do igual "="
Ainda é possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", veja:
prompt$ HOJE=$(date) prompt$ echo "Hoje é: $HOJE" Hoje é: Sáb Abr 24 18:40:00 BRT 2004 prompt$ unset HOJE prompt$ echo $HOJE
prompt$
E finalmente, o comando "unset" apaga uma variável.
Para ver quais as variáveis que o shell já define por padrão, use o comando "env"
Diferente de outras linguagens de programação, o shell não usa os parênteses para separar o comando de seus argumentos, mas sim o espaço em branco. O formato de um comando é sempre:
COMANDO OPÇÕES PARÂMETROS
O comando "cat" mostra o conteúdo de um arquivo. O comando "cat -n sistema" mostra o nosso script, com as linhas numeradas. O "-n" é a opção para o comando, que o instrui a numerar linhas, e "sistema" é o último argumento, o nome do arquivo.
O "read" é um comando do próprio shell, já o "date"" é um executável do sistema. Dentro de um script, não faz diferença usar um ou outro, pois o shell sabe como executar ambos. Assim, toda a gama de comandos disponíveis no Unix/Linux pode ser usada em scripts!
Há vários comandos que foram feitos para serem usados com o shell, são como ferramentas. Alguns deles:
Comando Função Opções úteis cat Mostra arquivo -n, -s cut Extrai campo -d -f, -c date Mostra data -d, +'...' find Encontra arquivos -name, -iname, -type f, -exec grep Encontra texto -i, -v, -r, -qs, -w -x head Mostra Início -n, -c printf Mostra texto nenhuma rev Inverte texto nenhuma sed Edita texto -n, s/isso/aquilo/, d seq Conta Números -s, -f sort Ordena texto -n, -f, -r, -k -t, -o tail Mostra Final -n, -c, -f tr Transforma texto -d, -s, A-Z a-z uniq Remove duplicatas -i, -d, -u wc Conta Letras -c, -w, -l, -L
Use "man comando" ou "comando --help" para obter mais informações sobre cada um deles.
E o melhor, em shell é possível combinar comandos, aplicando-os em seqüência, para formar um comando completo. Usando o pipe "|" é possível canalizar a saída de um comando diretamente para a entrada de outro, fazendo uma cadeia de comandos. Exemplo:
prompt$ cat /etc/passwd | grep root | cut -c1- root:x:0: operator:x prompt$
Introdução ao Shell Script - Aurélio Marinho Jargas
Tente fazer o script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório. Exemplo de uso:
prompt$ testa-arquivos Digite o arquivo: /naoexiste O arquivo '/naoexiste' não foi encontrado
prompt$ testa-arquivos Digite o arquivo: /tmp /tmp é um diretório
prompt$ testa-arquivos Digite o arquivo: /etc/passwd /etc/passwd é um arquivo
prompt$
Introdução ao Shell Script - Aurélio Marinho Jargas
Até agora vimos o básico, o necessário para se fazer um script de funcionalidade mínima. A seguir, conceitos novos que ampliarão as fronteiras de seus scripts!
Assim como os comandos do sistema que possuem e opções e parâmetros, os scripts também podem ser preparados para receber dados via linha de comando.
Dentro do script, algumas variáveis especiais são definidas automaticamente, em especial, "$1" contém o primeiro argumento recebido na linha de comando, "$2" o segundo, e assim por diante. Veja o script "argumentos":
#!/bin/sh
echo "O nome deste script é: $0" echo "Recebidos $# argumentos: $*" echo "O primeiro argumento recebido foi: $1" echo "O segundo argumento recebido foi: $2"
Ele serve para demonstrar o conteúdo de algumas variáveis especiais, acompanhe:
prompt$ ./argumentos um dois três O nome deste script é: ./argumentos Recebidos 3 argumentos: um dois três O primeiro argumento recebido foi: um O segundo argumento recebido foi: dois
O acesso é direto, basta referenciar a variável que o valor já estará definido. Assim é possível criar scripts que tenham opções como --help, --version e outras.
O shell também sabe fazer contas. A construção usada para indicar uma expressão aritmética é "$((...))", com dois parênteses.
prompt$ echo $((23)) 6 prompt$ echo $((23-2/2+3)) 8 prompt$ NUM= prompt$ echo $((NUM*2)) 88 prompt$ NUM=$((NUM+1)) prompt$ echo $NUM 45
E por fim, o for percorre uma lista de palavras, pegando uma por vez:
for numero in um dois três quatro cinco do echo "Contando: $numero" done
Uma ferramenta muito útil para usar com o for é o seq, que gera uma seqüência numérica. Para fazer o loop andar 10 passos, pode-se fazer:
for passo in $(seq 10)
O mesmo pode ser feito com o while, usando um contador:
i= while test $i -le 10 do i=$((i+1)) echo "Contando: $i" done
E temos ainda o loop infinito, com condicional de saída usando o "break¨:
while : do if test -f /tmp/lock then echo "Aguardando liberação do lock..." sleep 1 else break fi done
Introdução ao Shell Script - Aurélio Marinho Jargas
A melhor parte finalmente chegou, agora é a sua vez de se divertir. Seguem alguns exercícios que podem ser resolvidos usando o que foi aprendido até aqui.
Alguns exigirão pesquisa e necessitarão de algumas ferramentas que foram apenas citadas, mas não aprendidas. O shelleiro também tem que aprender a se virar sozinho!
Exercício 1 - relacao.sh
Recebe dois números como parâmetro e mostra a relação 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$
Exercício 2 - zerador.sh
Recebe um número como parâmetro 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$
Exercício 3 - substring.sh
Recebe duas palavras como parâmetro e verifica se a primeira palavra está contida dentro da segunda. Só mostra mensagem informativa em caso de sucesso, do contrário não 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$
Pesquise sobre o comando grep
Exercício 7 - parametros.sh
Mostra na tela todos os parâmetros recebidos na linha de comando, contando-os. Exemplo:
prompt$ ./parametros.sh a b c d e f Parâmetro 1: a Parâmetro 2: b Parâmetro 3: c Parâmetro 4: d Parâmetro 5: e Parâmetro 6: f prompt$
Pesquise sobre o comando shift
Introdução ao Shell Script - Aurélio Marinho Jargas
Livro Programação Shell Linux Autoria de Julio Cezar Neves, Editora Brasport, ISBN 85-7452-118-
Livro BASH - Guia de Consulta Rápida Autoria de Joel Saade, Editora Novatec, ISBN 85-7522-006-
Lista de discussão nacional sobre Shell Script http://br.groups.yahoo.com/group/shell-script
Página do instrutor sobre Shell Script, com links para vários outros materiais http://aurelio.net/shell