terça-feira, 13 de março de 2012

Como escrever shell scripts (final)

Repetir comandos é uma parte fundamental de qualquer algorítmo avançado. Nessa parte de nosso tutorial, vamos aprender a repetir comandos enquanto uma condição for verdadeira.



Imagine que você queira repetir um determinado comando cinco vezes. O que você poderia fazer? Ora, o código mais simples possível:  comando ; comando ; comando ; comando; comando . Mas e se você quisesse repetir a instrução mil vezes? Você escreveria mil vezes a mesma coisa?


Embora funcione, ficar copiando os mesmos comandos repetidas vezes é a maneira errada de se escrever o algorítmo pois, além de não ser elegante, torna o arquivo desnecessariamente maior.


Felizmente, o shell Bash já possui estruturas próprias que nos permitem repetir comandos um número limitado de vezes com o mínimo de linhas de código necessárias. Essas estruturas são o for, o while e o until.


Há diferenças sutis entre as três estruturas que devem ser compreendidas antes de sua utilização a fim de se evitarem surpresas desagradáveis na hora de testar o programa. O loop for permite que você possa "brincar" com uma lista de valores. Sua sintaxe é:


for argumento in [lista]; do


comandos


done


Ele é ideal para quando você precisa tratar a saída de comandos como ls ou tratar as linhas de um arquivo através do comando cat. O exemplo abaixo mostra como exibir uma lista personalizada dos arquivos do diretório atual:


#"/bin/bash


for i in $( ls ); do


echo Arquivo: $i


done


Com um pouco de adaptação, você poderia criar um script simples de backup ou um que removesse arquivos com determinado nome, extensão ou idade!


Já o loop while executa uma série de comandos enquanto uma determinada expressão for verdadeira. A execução é terminada uma vez que a expressão se torne falsa ou se há um comando break dentro do loop. A sintaxe de while é:


while [condição]; do


comandos


done


O exemplo a seguir mostra como contar de zero a dez:


#!/bin/bash


cont=0


while [ $cont -le 10 ]; do


echo $cont


(( $cont++ ))


done


Perceba que, no interior do loop, inserimos a instrução (( $cont++ )) que aumenta o valor da variável cont. Por quê? Ora, a tradução literal do comando while acima é "enquanto cont for menor ou igual a 10, faça...", assim, somos obrigados a inserir, entre os comandos que serão executados no loop, alguma instrução que modifique o valor da variável original, que foi criada com o valor 0. Se você, inadvertidamente, removesse a instrução que aumenta o valor de $cont, a condição que while avalia jamais se tornaria verdadeira ($cont teria sempre o mesmo valor 0) e os comandos seriam executados eternamente (não na realidade, bastaria pressionar Ctrl+C para interromper o script). Isso é o que chamamos de loop infinito e geralmente ocorre devido a um erro na lógica de programação. O shell Bash é um exemplo de loop infinito criado propositalmente.


A última estrutura de repetição é a until e ela é quase a mesma coisa do que while, com a diferença de que a série de comandos é executada enquanto a condição for falsa. Sua sintaxe é praticamente a mesma de while.



Indo além


Espero que vocês tenham gostado dessa série sobre shell script. Obviamente, ela não cobriu todo o assunto - ainda faltam muitos tópicos, como criar funções e caixas de diálogo - mas o Norte da filosofia GNU é ensinar a pescar - e não dar o peixe. Com esses quatro artigos, você já deve ser capaz de criar alguns scripts simples e de compreender vários arquivos shell que podem ser encontrados pela net. Agora, com base naquilo que você aprendeu, continue estudando o assunto e se aprofunde. Teste e não tenha medo de errar, pois o erro é parte do acerto.


Até mais e boa sorte!

Nenhum comentário:

Postar um comentário