1. Introdução
Quem usa linux conhece bem o interpretador de comandos sh, ou variações como o
bash (uma abreviação de Bourne-Again Shell – um dos mais usados atualmente). Esses
interpretadores são programas feitos para intermediar o usuário e seu sistema. O usuário
digita um comando e o interpretador o executa no sistema. Pode-se dizer que o shell é o
intermediário entre o usuário e o kernel. O que muita gente não sabe é que estes
interpretadores de comandos têm uma "poderosa" linguagem de script embutida nelas.
Diversas pessoas utilizam-se desta linguagem para facilitar a realização de inúmeras
tarefas administrativas no linux, ou até mesmo criar seus próprios programinhas.
Além de executar comandos do sistema, o shell também tem seus próprios
comandos, como IF, FOR e WHILE, e também possui variáveis e funções. Tudo isso
para tornar um pouco mais "espertas" e flexíveis essas chamadas de comandos feitas
pelo usuário. Como estas são as características de uma linguagem de programação, o
shell é uma ferramenta muito poderosa para desenvolver scripts e programinhas rápidos
para automatizar tarefas do dia-a-dia. Você poderá criar scripts para automatizar as
tarefas diárias de um servidor, para efetuar backup automático regularmente, procurar
textos, criar formatações, e muito mais.
Para os que vêm do mundo MSDOS, pense no shell scripts como um batch (dos
arquivos .BAT). O shell scripts é como um arquivo batch, porém muito melhor.
Uma das vantagens destes shell scripts é que eles não precisam ser compilados,
ou seja, basta apenas criar um arquivo texto qualquer, e inserir comandos à ele.
A primeira linha indica que todas as outras linhas abaixo deverão ser executadas
pelo bash (que se localiza em /bin/bash), e a segunda linha imprimirá na tela a frase
"Olá mundo!!!", utilizando o comando echo, que serve justamente para isto. Como se
pode ver, todos os comandos que são digitados diretamente na linha de comando,
poderão ser colocados no arquivo de shell script, criando uma série de comandos, e é
essa combinação de comandos que forma o chamado shell script.
O 'valor' será atribuído a 'variável '. Valor pode ser uma frase, números, e até
outras variáveis e comandos. O valor pode ser expressado entre as aspas (""), apóstrofos
('') ou crases (``). As aspas vão interpretar as variáveis que estiverem dentro do valor, os
apóstrofos lerão o valor literalmente, sem interpretar nada, e as crases vão interpretar
um comando e retornar a sua saída para a variável. Como segue:
$ variavel="Eu estou logado como usuário $user"
$ echo $variavel
Eu estou logado como usuário cla3
Para criar um script em que o usuário deva interagir com ele, é possível que se
queira que o próprio usuário defina uma variável, e para isso usa-se o comando read,
que dará uma pausa no script e ficarará esperando o usuário digitar algum valor e teclar
enter. Exemplo:
echo "Entre com o valor para a variável: "; read variavel
4. Construções condicionais
Construções condicionais ou de decisão são declarações que fazem com que
determinados códigos sejam executados dependendo de uma decisão. Estas estruturas
são muito importantes pois permitem que sejam tomadas algumas decisões durante a
execução de um script.
4.1. Expressões
As expressões de teste são comparáveis a expressões de comparação de outras
linguagens de programação. Estas expressões executam testes matemáticos, booleanos e
outros testes que indicam um estado de verdadeiro ou falso, dependendo da saída.
Para tipos diferentes de dados, existem operadores diferentes a serem utilizados,
que podem ser dos seguintes tipos:
Expressão Verdadeiro se
-e arquivo Arquivo existe
-f arquivo Arquivo existe e é um arquivo normal
-r arquivo Arquivo pode ser lido
-w arquivo Arquivo pode ser gravado
-d arquivo Arquivo é um diretório
Arquivo1 -nt Arquivo2 Arquivo1 é mais novo que Arquivo2
Arquivo1 -ot Arquivo2 Arquivo1 é mais velho do que Arquivo2
Expressão Significado
!expressão NOT expressão
Valor1 & Valor2 Valor1 AND Valor2
Expressão1 -a Expressão2 Expressão1 AND Expressão2
Valor1 || Valor2 Valor1 OR Valor2
Expressão1 -o Expressão2 Expressão1 OR Expressão2
4.2. Declaração IF
A declaração if executa determinadas linhas de comando, dependendo de uma
expressão condicional ser verdadeira ou falsa. A sintaxe da declaração if é mostrada a
seguir:
if comandos_de_teste; then
comandos_consequentes;
[elif mais_comandos_de_teste; then
mais_comandos_consequentes; ]
[else consequentes_alternativos; ]
fi
5. Funções bash
O shell permite criar funções para substituir sequências de comandos que são
frequentemente utilizadas. Essas funções geralmente recebem um argumento, ou mais,
para que trabalhem esses dados.
A idéia é que o código em uma função deve ser criado de uma maneira que seja
útil em mais de uma circunstância. Do ponto de vista do bash, uma função de shell é
essencialmente um script dentro de outro script. As funções podem implementar as
mesmas rotinas que os scripts, com a vantagem adicional de que as funções
apropriadamente programadas podem ser reutilizadas em outros scripts.
Para declarar uma função, deve-se utilizar a palavra-chave function. As funções,
assim como os scripts, usam argumentos e esses são tratados da mesma forma no
código. Todo o código contido em uma função aparece entre chaves. A sintaxe básica
para declaração de uma função é apresentada a seguir.
function nome_da_funcao ()
{
comandos
}
8. Referências
Treinamento, Equipe Conectiva (2001) “Administração de Sistemas Linux”, Primeira
Edição, Agosto.
Jargas, Aurélio Marinho (2003) “Dialog –tudo”, versão 5,
http://aurelio.net/shell/dialog/, Agosto.
Gite, Vivek G. (2002) “Linux Shell Scripting Tutorial (LSST) v1.05r3”,
http://www.freeos.com/guides/lsst/index.html, Abril.
Cisneiros, Hugo, (2004) “Programando em shell-script”,
http://www.devin.com.br/eitch/shell_script/, Agosto.