Programando em Shell Script
Aprenda a utilizar o recurso que muitas pessoas já usam para realizar inúmeras tarefas administrativas no Linux
hugo@netdados.com.br
Quem usa Linux conhece bem o prompt de comando sh, ou variações como o bash. O que muita gente não sabe é que o sh ou o bash têm uma "poderosa" linguagem de script embutida, utilizada por diversas pessoas para facilitar a realização de inúmeras tarefas administrativas no Linux, ou até mesmo para criar seus próprios programinhas.
O criador da distribuição Slackware, Patrick Volkerding, usa essa linguagem para toda instalação e configuração de sua distribuição. E agora você também poderá criar scripts para automatizar as tarefas diárias de um servidor, efetuar backup automático regularmente, procurar textos, criar formatações, e muito mais.
Para você ver como esta linguagem pode ser útil, vamos apresentar alguns passos introdutórios.
Os interpretadores de comandos são programas feitos para intermediar o usuário e seu sistema. Através deles, o usuário manda um comando, e o interpretador o executa no sistema. Eles são a "shell" do sistema Linux. Usaremos o interpretador de comandos bash, por ser mais "extenso" que o sh. E para que você tenha uma compreensão melhor das informações aqui relatadas, é recomendável ter uma base sobre o conceito de lógica de programação.
Uma das vantagens desses shell scripts é que eles não precisam ser compilados, ou seja, basta criar um arquivo texto qualquer, e inserir nele os comandos. Para dar a esse arquivo a definição de "shell script", teremos que incluir uma linha no começo do arquivo (#!/bin/bash) e torná-lo "executável", utilizando o comando chmod.
Vamos seguir com um pequeno exemplo de um shell script que a tela mostre: "Nossa! Estou vivo!":
#!/bin/bash
echo `Nossa! Estou vivo!'
Fácil, hein? 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 "Nossa! Estou vivo!", utilizando o comando echo, que serve justamente para isso.
Assim, todos os comandos que digitar diretamente na linha de comando, você poderá incluir no seu shell script, criando uma série de comandos. E é essa combinação de comandos que
forma o chamado shell script. Tente também dar o comando `file arquivo' e veja que a definição dele é de Bourne-Again Shell Script (Bash Script).
Contudo, para o arquivo ser executável, você tem que atribuir essa propriedade a ele. Usando o comando chmod, faremos a atribuição:
# chmod +x arquivo
Pronto, o arquivo poderá ser executado com um simples "$./arquivo".
Conceito de variáveis em shell script
Variáveis são caracteres que armazenam dados, uma espécie de atalho. O bash reconhece uma variável quando ela começa com $, ou seja, a diferença entre `palavra' e `$palavra' é que a primeira é uma palavraqualquer, e a outra, uma variável. Para definir uma variável, utilizamos a seguinte sintaxe:
variavel="valor"
O `valor' será atribuído à `variável'. Valor pode ser uma frase, números, e até outras variáveis e comandos. O valor pode ser expresso entre 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. Vejamos
exemplos:
$ variavel="Eu estou logado como usuário $user"
$ echo $variavel
Eu estou logado como usuário cla
$ variavel=`Eu estou logado como
usuário $user'
$ echo $variavel
Eu estou logado como usuário $user
$ variavel="Meu diretório atual é o `pwd`"
$ echo $variavel
Meu diretório atual é o /home/cla
|
Se você quiser criar um script em que o usuário deve interagir com ele, é possível que você queira que o próprio usuário defina uma variável, e para isso usamos o comando read, que dará uma pausa no script e
ficará esperando o usuário digitar algum valor e teclar enter. Exemplo:
echo "Entre com o valor para a variável: " ; read variavel (O usuário digita e tecla enter, vamos supor que ele tenha digitado `clarissa eu te amo')
echo $variavel clarissa eu te amo
Controle de fluxo com o if
Controle de fluxo são comandos que vão testando algumas alternativas, e, de acordo com essas alternativas, vão executando comandos. Um dos comandos de controle de fluxo mais usados é certamente o if, que é
baseado na lógica "se acontecer isto, irei fazer isso, se não, irei fazer aquilo". Vamos dar um exemplo:
if [ -e $linux ]
then
echo `A variável $linux existe.'
else
echo `A variável $linux não existe.'
fi
O que este pedaço de código faz?
O if testa a seguinte expressão:
se a variável $linux existir, então (then) ele diz que existe com o echo, senão (else), ele diz que não existe. O operador -e que usei, e é pré-definido, é uma das opções que você pode encontrar na listagem
dos operadores, conforme a tabela:
-eq - Igual
!= - Diferente
-gt - Maior
-lt - Menor
-o - Ou
-d - Se for um diretório
-e - Se existir
-z - Se estiver vazio
-f - Se contiver texto
-o - Se o usuário for o dono
-r - Se o arquivo pode ser lido
-w - Se o arquivo pode ser alterado
-x - Se o arquivo pode ser executado
Outras alternativas
Existem inúmeros comandos
no Linux, e para explicar todos,
teríamos de publicar um livro.
Mas existem outras possibilidades
de aprendizado dessa linguagem,
que também é usada em todas as
programações. Primeiro, você pode dar uma olhada na manpage do
bash (comando man bash), que
disponibilizará os comandos embutidos no interpretador de comandos. Uma das coisas essenciais para
o aprendizado é sair coletando
exemplos de outros scripts e
estudá-los minuciosamente. Procure sempre comandos e expressões
novas em outros scripts e em
manpages dos comandos. E por
último, mas não menos importante, pratique bastante.
Na tabela a seguir, você pode encontrar uma listagem de comandos para usar em sua shell script:
echo - Imprime texto na tela
read - Captura dados do usuário e coloca numa variável
exit - Finaliza o script
sleep - Dá uma pausa de segundos no script
clear - Limpa a tela
stty - Configura o terminal temporariamente
tput - Altera o modo de exibição
if - Controle de fluxo que testa uma ou mais expressões
case - Controle de fluxo que testa várias expressões ao mesmo tempo
for - Controle de fluxo que testa uma ou mais expressões
while - Controle de fluxo que testa uma ou mais expressões
E assim você pode começar a escrever seus próprios scripts e facilitar sua vida no Linux.
|