Tabela de conteúdos

Introdução aos Shell Scripts

Um shell script nada mais é que um arquivo texto, onde digitamos uma serie de comandos a serem executados, um por linha. Ele é muito útil, por exemplo, para automatizar alguma tarefa repetitiva. Vejamos um primeiro exemplo:

#!/bin/bash
date +"Iniciando backup do dia %d/%m/%Y as %H:%M"
echo "Tamanho dos diretórios :"
du -sh /bin /sbin
tar -czf /tmp/backup-binarios.tar.gz /bin /sbin
date +"Encerrando backup do dia %d/%m/%Y as %H:%M"

Os shells atuais, como o bash, que utilizamos por padrão em quase todas as distribuições Linux incorporaram uma serie de funcionalidades, valendo destacar:

Uso de variáveis

As variáveis de um shell script são semelhantes às de um programa escrito em outra linguagem, com a diferença principal de que elas não possuem tipo. Podemos definir nossas próprias variáveis ou utilizar algumas que já são definidas pelo próprio shell.

#!/bin/bash
 
VAR="chocolate"
echo "Eu gosto de comer $VAR amargo."
#!/bin/bash
 
echo -n "Digite o nome de uma comida : "
read VAR
echo "$USER gosta de $VAR."

Para verificar a lista de todas as variáveis existentes automaticamente, utilize o comando set. Apesar das variáveis não possuírem tipo, elas podem ser utilizadas em operações aritméticas básicas:

#!/bin/bash
 
echo -n "Valor 1 : "
read VAR1
echo -n "Valor 2 : "
read VAR2
VAR3=$[$VAR1+$VAR2]
echo "Soma = $VAR3"

Argumentos da linha de comando

No bash argumentos da linha de comando são variáveis especiais, com a seguinte nomenclatura:

#!/bin/bash
 
echo "Nome do script = $0"
VAR3=$[$1+$2]
echo "Soma dos argumentos 1 e 2 = $VAR3"

Exemplo de execução:

aluno@debian:~$ ./soma.sh 5 9

Estruturas de decisão

As estruturas de decisão if e case do bash funcionam de forma semelhante às de uma linguagem tradicional. Vejamos os exemplos a seguir:

#!/bin/bash
#Realiza backup de acordo com o dia da semana
 
DIA_SEMANA=`date +%u`
 
if [ $DIA_SEMANA -eq 1 ]
then
  echo "Hoje é segunda, realizando backup completo"
  # Comandos para backup completo
  # ...
  # ...
else
  echo "Realizando backup incremental"
  # Comandos para backup incremental
  # ...
  # ...
fi
#!/bin/bash
# Configura placa de rede de acordo com opção passada pela linha de comando (casa ou trabalho)
 
case "$1" in
casa)
  ifconfig eth0 192.168.1.100 netmask 255.255.255.0
  route add default gw 192.168.1.1
  ;;
trabalho)
  dhclient eth0
  ;;
esac

Estruturas de repetição

As estruturas de repetição for e while do bash também funcionam de forma semelhante às de uma linguagem tradicional. Uma funcionalidade importante do for é sua habilidade de utilizar nomes de arquivos em cada iteração, como será visto em um dos exemplos a seguir:

#!/bin/bash
# Imprime o tamanho e espaço em uso do /home, "dorme" por 15 segundos, repete (10 vezes).
 
for i in {1..10}
do
  df -h /home
  sleep 15
done
#!/bin/bash
# Imprime o tamanho e espaço em uso do /home, "dorme" por 15 segundos, repete (indefinidamente).
 
while (true)
do
  df -h /home
  sleep 15
done
#!/bin/bash
# Cria uma cópia de todos os arquivos txt do diretório atual
 
for i in *.txt
do
  cp $i backup-$i.txt
done