Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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...
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. A seguir um exemplo de shell script bem simples:
1 #!/bin/sh
2 # Shell script para adicionar uma linha com conteudo definido
3 # pelo usuario a um arquivo
4 echo -e "Inserir:" 'c'
5 read inserir
6 echo $inserir >> $1
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".
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").
Simples, não?! Agora vamos a algumas dúvidas que podem ter surgido:
Bem, eu acho que agora você já está pronto para scripts um pouco mais complexos. 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
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).
h
S
11-15) Verifica se a resposta dada é igual a "s" ou "S", se for, executa o comando rm -rf para apagar todos os arquivos
Procura 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ê nao seja root é apresentada uma mensagem de erro e o programa é finalizado.
P: O que é "$LOGNAME"?
R: É uma variável do ambiente shell. Utilize o comando "env" para conhecer as variáveis que o seu shell possui.
Agora falaremos de expressões de teste, que são utilizadas para comparações de strings. As expressões de teste não são
utilizadas somente com o comando "if", podem ser utilizadas também com o comando "while" que será explicado mais
adiante. A seguir as expressões com suas respectivas funções.
Expressões de strings:
Expressão Função:
exp1 -a exp2 Torna-se verdadeira se ambas as expressões
forem verdadeiras.
exp1 -o exp2 Torna-se verdadeira se uma das expressões for
verdadeira.
!exp Torna a avaliação em verdadeira, se for falsa
e em falsa se for verdadeira.(ex: if ! [ -d
diretório ] funcionará como "Se o diretorio não
existir".)
Bem, agora que você já conhece as expressões de testes iremos explicar como gerer "loops" com os comandos "for" e "while".
O comando "for" é utilizado para que uma tarefa seja executada sobre diversos itens especificados. O while é utilizado para
que uma tarefa seja executada até que a expressão de teste especificada torne-se falsa.
Exemplos:
1 #!/bin/bash
2 # xvslide - exibe todas as imagens de um diretorio 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
h
S
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.
Explicação:
5) "faça"
6) "mostrar contagem"
8) "Subtraia 1 de $contagem"
9) "feito!"
Depois desses dois exemplos foi possível constatar como funcionam os comandos "for" e "while".