Programando em Shell Script
1- Introdução
Quem usa Linux conhece bem o prompt de comando sh, ou variações como bash. O que muita gente não conhece é que o sh ou bash tem uma “poderosa” linguagem de script embutido nelas. Várias pessoas utilizam esta linguagem para executar varias tarefas administrativas no Linux, ou ate mesmo criar seus próprios programas. O criador da distribuição Slackware, Patrick Volkerding utiliza esta linguagem para toda a instalação e configuração da sua distribuição. Podemos criar scripts para fazer as tarefas diárias de um servidor, para efectuar backup automático, criar textos, vários tipos de formatação e muito mais. Para vermos como esta linguagem pode ser útil, vamos ver alguns passos introdutórios sobre ela.
Os interpretadores de comandos são programas utilizados como intermediário entre os utilizadores e o sistema. Através destes interpretadores, o utilizador digita um comando e o interpretador executa no sistema. Eles são a Shell do sistema Linux. Vamos utilizar o interpretador de comandos bash, por ser muito mais extenso que o sh, e para que haja uma melhor compreensão das informações obtidas, e bom ter uma base sobre o conceito de lógica de programação.
Uma das vantagens destes shell scripts é qe eles não precisam ser compilados, ou seja, bast apenas criar um arquivo de texto qualquer, e inserir os comandos no TXT. Para darmos a definição a este arquivo de “shell script”, temos que incluir uma linha de comando no inicio do arquivo assim (#!/Bin/bash) e trorna-lo executável usando o comando chmod. Vamos seguir com um pequeno exemplo de um shell script que mostre na tela : “InterRedes 2009!” ;
- Código:
-
#!/Bin/bash
Echo ‘InterRedes 2009!’
Descrevendo o script acima a primeira linha indica que todas as linhas a seguir devem ser executadas pelo bash (localizado em /Bin/bash), na segunda linha mostra no monitor “InterRedes 2009” utilizando o comando echo. Como se pode ver, todos os comandos utilizados na linha de comandos podem ser incluídos no shell script, criando uma serie de comandos, e a essa serie de comandos chamamos de shell script. Vamos tentar também dar o comando “file arquivo” e vemos que a definição dele é de Bourne - Again Shell Script (Bash Script).
Contudo, para o arquivo poder ser executável, temos de atribuir o comando de executável. E como vimos antes o comando chmod encarrega-se disso:
- Código:
-
$ chmod +x arquivo
E pronto o arquivo pode ser executável com um simples “./arquivo”.
Conceitos de Variáveis em shell script
Variáveis são caracteres que armazenam dados, tipo um atalho. O bash reconhece uma variável quando ela começa com $, ou seja, a diferença entre ‘palavra’ e ‘$palavra’ é que a primeira e uma palavra qualquer e a outra é uma variável. Para defenirmos uma variável usamos a seguinte sintaxe:
- Código:
-
Variável=”valor”
O “valor” será atribuído a “variável”. O valor pode ser números, frases, comandos ou ate outras variáveis. 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 vão ler o valor literalmente, sem interpetar nda, e as crases vão interpetar um comando e retornar a sua saída para a variável. Vamos ver ums exemplos:
- Código:
-
$ variável=”Eu fiz login como utilizador $user”
$ echo $variavel
Eufiz login como utilizador InterRedes
$ variável=’ Eu fiz login como utilizador $user’
$ echo $variavel
Eu fiz login como utilizador $user’
$ variável=”O meu directório actual é o ‘pwd’”
$ echo $variavel
O meu diretorio actual é o /home/interredes
Se quisermos criar u script em que o utilizador deve interagir com ele, é possível que você queira que o próprio utilizador defina uma variável, e para isso usamos o comando read, que dará uma pausa no script e fica a espera que o utilizador digite algum valor e prima enter.
Exemplo:
- Código:
-
Echo “Entre com o valor para a variável: “ ; read variável
(O utilizador digita a tecla enter, vamos supor que ele digitou ‘eu sou admin’)
Echo $variavel
Eu sou admin
Controlo de fluxo com o if
Controlo 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 controlo de fluxo mais usados e o if, que e baseado na lógica “ se acontecer isto, irei fazer isto, se não vou fazer aquilo”.
Exemplo:
- Código:
-
If [ -e $linux ]
then
echo ‘A variável $linux existe. ‘
else
echo ‘A variável $linux não existe.’
fi
O que faz este pedaço de código?
O if testa a seguinte expressão: Se a variável $linux existir, então (then) ele diz que existe com echo, se não (else), ele diz que não existe. O operador –e que usamos é pré-defenido e podemos wncontrar a lista dos operadores na seguinte tabela:
Outras Alternativas
Existem inúmeros comandos no Linux, e para explicar todos tínhamos de criar um Livro. Mas existem outras possibilidades de aprendizado desta língua, que também é usado em todas as programações. Primeiro de tudo temos de poder ver o manpage do bash (comando man bash), que disponibilizara os comandos embutidos no interpretador de comandos. Uma das coisas essenciais para aprender é arranjar outros scripts e ir estudando e comparando entre eles. Procuramos sempre comandos e expressões novas em outros scripts e em manpages dos comandos. E por ultimo praticar bastante. ;-)
Na seguinte tabela, podemos encontrar uma lista de comandos para serem utilizados numa shell script:
- Código:
-
Criando os nossos próprios scripts facilitamos parte da nossa vida no Linux!!!
2. Aprofundando mais um bocado!!!
Já falamos sobre o conceito de programação em shell script, e demos o primeiro passo para construir os nossos scripts. Agora vamos aprofundar darmo-nos nos comandos mais complicados, aprendendo a fazer programas mais úteis. Nestes comandos estão incluídos o case, for, while e until. Além disso vamos falar de funções e, por ultimo temos um programa shell script.
CaseO case é para controlo de fluxo, tl como o if. Mas enquanto o if testa expressos não exatas, o case vai agir de acordo com os resultados exatos.
Exemplo:
- Código:
-
Case $1 in
Parametro1) comando1 ; comando2 ;;
Parametro2) comando3 ; comando4 ;;
*) echo “Você tem de entrar com um parâmetro valido” ;;
Esac
Aqui aconteceu o seguinte: o case leu a variavel $1 (que é o primeiro parâmetro passado para o programa), e comparou com valores extaos. Se a variavel $1 for igual à “parametro1”, então o programa executará o comando 1 e o comando2; se for igual à “parametro2”, executara o comando3 e o comando4, e assim em diante. A ultima opção (*), é uma opção padao do case, ou seja, se o parâmetro passado não for igual a nenhuma das outras opções anteriores, esse comando será executado automaticamente.
Você pode ver que, com o case fica muito mais fácil criar um “menu” para o shell script do que com o if. Vamos demontrar a mesma função anterior, mas agora usando o if:
- Código:
-
If [ -z $1 ] ; then
echo “Você tem de entrar com um parâmetro válido”
exit
elif [ $1 = “parametro1” ] ; then
comando1
comando2
elif [ $1 = “parametro2” ] ; then
comando3
comando4
else
echo “Voce tem de enter com um parâmetro valido”
fi
MrTcp
Incopleto falta acabar as tabelas....