nice.pereira@faccat.br, tuani@faccat.br
1. Introdução:
Shell scripts são um meio de executar várias tarefas em apenas um comando, muitas vezes
com o objetivo de facilitar o trabalho de quem os usa. A facilidade na criação destes scripts
é um ponto forte que faz com que muitas pessoas optem por este tipo de linguagem sempre
que possível, pois estes possuem algumas limitações. O básico do shell script começa com
#!/bin/bash dentro de um arquivo que pode ter a extensão que desejar, desde que no início
do arquivo contenha o caminho para o interpretador.
2. Histórico
O primeiro Shell, Shell sh, foi desenvolvido pelo Bell Labs (Laboratórios Bell) e é mais
difundido na comunidade UNIX. O Shell C (csh) desenvolvido pela universidade de
Berkeley foi mais difundido devido ao uso pelos programadores.
3. Paradigma
Interpretado.
Shell Script é um arquivo de texto ou script que é interpretado pela shell especificada para
realizar ações envolvendo o sistema. Shell scripts são muito utilizados para automatizarem
ações repetitivas ou corriqueiras envolvendo programas e arquivos do sistema.
4. Características
4.1. SHELL
O Shell nada mais é, que o responsável entre a comunicação do usuário com o Kernel do
sistema. Para isso, basta que o usuário conheça os comando e sintaxes apropriadas há este
Shell.O Shell é o "prompt" da linha de comando do Linux, é o servo que recebe os
comandos digitados pelo usuário e os executa.O Shell é aquele que aparece logo após se
digitar a senha do usuário e entrar na tela preta do Linux. Ou na interface gráfica, ao clicar
no ícone do Xterm ou do rxvt.
localhost login: root
Password:
Last login: Fri Apr 16 01:57:28 on tty5
[root@localhost root]# _
Ai está o Shell, essa é a sua função: esperar e executar. Cada comando digitado é lido,
checado, interpretado e enviado ao Sistema Operacional para ser de fato executado.
Fazer um script e dar um nome, por exemplo "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:
Isso é um Shell Script. Um arquivo de texto que contém comandos do sistema e pode ser
executado pelo usuário.
5. EXEMPLOS
5.1. Exemplo 1
A seguir um exemplo de shell script bem simples:
1 #!/bin/sh
2 # Shell script para adicionar uma linha com conteúdo definido
3 # pelo usuário a um arquivo
4 echo -e "Inserir:" '\c'
5 read inserir
6 echo $inserir >> $1
A seguir a explicação de cada linha:
1) Essa linha especifica ao shell qual interpretador deve ser usado para a execução do
programa, como este é um shell script o interpretador usado é o sh, contido no diretório
"/bin".
2-3) Apenas comentários(para comentar linhas preceda-as por "#")
4) O comando "echo" é utilizado para exibir um prompt ao usuário para que ele digite o que
dejesa inserir no arquivo.
5) Define que aquilo que o usuário digitou no prompt será chamado pela string $inserir;
6) Finalmente, utiliza o comando "echo" para enviar o que o usuário digitou para a última
linha do arquivo que foi especificado no primeiro argumento do comando("$1").
* Por que foram utilizados os argumentos "-e" e "'\c'" no comando "echo"?
R: O argumento "-e" habilita a interpretação de argumentos como o "'\c'" que por sua vez é
utilizado para que se crie um prompt na posição em que ele estiver.
*Pra que serve esse ">>"?
R: Serve para aquilo que seria exibido na saída default seja inserido em um determinado
arquivo sem destruir o conteúdo do mesmo. Caso fosse um ">" solitário o conteúdo do
arquivo seria destruído e ele passaria a ter apenas o que foi fornecido por nós. Esse tipo de
função chama-se "append".
5.2. Exemplo 2
O seguinte script procura por arquivos pertencentes a um determinado usuário, lista-os e,
caso haja a confirmação, apaga-os.
1 #!/bin/sh
2 # Apaga arquivos de um determinado usuário caso você seja root.
3 if [ "$LOGNAME" = "root" ]; then
4 if [ "$#" != 1 ]; then
5 echo "Uso: `basename $0` "
6 exit 0
7 fi
8 echo -e "Remover os arquivos de $1 [s/N]" '\c'
9 read resposta
10 if [ $resposta ]; then
11 if [ "$resposta" = s -o $resposta = S ]; then
12 rm -rf `find / -user $1 | grep -v "/dev/tty"`
13 else
14 exit 0
15 fi
16 else
17 exit 0
18 fi
19 else
20 echo "Erro: Voce precisa ser root para rodar este programa"
21 fi
Agora a explicação de cada linha:
1) Essa linha especifica ao shell qual interpretador deve ser usado para a execução do
programa, como este é um shell script o interpretador usado é o sh, contido no diretório
"/bin".
2) Apenas comentários(para comentar linhas é utilizado "#")
3) Utiliza o comando "if" para verificar se o usuário é root.
4-7) Verifica se o número de argumentos fornecidos na linha de comando é diferente de 1,
caso haja confirmação é exibida mensagem de erro e o programa é finalizado.
8-9) Exibe o prompt de confirmação(echo...) e nomeia a resposta dada como a string
$resposta(read resposta).
10) Verifica se foi dada alguma resposta.
11-15) Verifica se a resposta dada é igual a "s" ou "S", se for, executa o comando rm -rf
para apagar todos os arquivos pertencentes usuário especificado no argumento 1("$1")
utilizando o comando "find / -user $1| grep -v /dev/tty" para lista-los.
NOTA: O comando "grep" é utilizado para excluir da lista os arquivos /dev/ttyX, como
/dev/ttyS1, que recebem o uid do usuário ao serem abertas sessões e cuja exclusão poderia
prejudicar o funcionamento do sistema.
16-18) Caso o usuário não tenha dado uma resposta no prompt, o programa é finalizado.
19-21) Caso você não seja root é apresentada uma mensagem de erro e o programa é
finalizado.
* Como esse comando "if" é utilizado?
R: Simples.
if [ expressão de teste ]; then
comando em caso de positivo
else
comando em caso de negativo
fi
*O que é "$LOGNAME"?
R: É uma variável do ambiente shell. Para conhecer as variáveis que o seu Shell possui
utilize o comando "env".
5.3. Exemplo 3
O comando "for" é utilizado para que uma tarefa seja executada sobre diversos itens
especificados.
1 #!/bin/bash
2 # xvslide - exibe todas as imagens de um diretório seguidamente
3 # como "slides".
4 echo -e "Tempo de espera entre as imagens(seg):"'\c'; read tempo
5 for img in `ls`
6 do
7 xv $img &
8 sleep $tempo
9 killall xv
10 done
Agora a explicação de cada linha:
1) Essa linha especifica ao shell qual interpretador deve ser usado para a execução do
programa.
2-3) Comentários.
4) Exibe o prompt para que o usuário informe o tempo de espera entra as imagens e
identifica a resposta como $tempo.(";" separa comandos)
5) Inicia o comando "for" identificando a próxima imagem apresentada no comando "ls"
como $img.
6) do = fazer
7) roda o comando "xv" para visualizar a imagem identificada por $img. Note que o
comando está detachado("&") para que o script possa seguir após sua execução.
8) Utiliza o comando "sleep" para esperar o número de segundos indicados pela variável
$tempo.
9) Mata o processo correspondente ao "xv"
10) done = feito!
5.4. Exemplo 4
O while é utilizado para que uma tarefa seja executada até que a expressão de teste
especificada torne-se falsa.
Agora um exemplo de while: