Iniciando em Bash - Condicionais, Loops, Funções, Debugando Scripts
Introdução
É necessário aquele #!/bin/bash no início dos scripts? Não é obrigatório, mas é aconselhável, o script até consegue executar sem isso. Esta linha serve para duas coisas:
* Definir o tipo do arquivo, se você executar:
file arquivo.sh
Ele irá retornar o seguinte:
arquivo.sh: Bourne-Again shell script text executable
* Definir o tipo de shell que o script irá utilizar, no caso bash, mas poderia ser sh,ksh,etc..
Condicionais
A princípio veremos apenas o uso do if, com textos, números ou variáveis
[editar]
IF ... THEN
A sintaxe do IF no bash é um pouco diferente do que acontece nas outras linguagens, (apesar de bash não ser considerado uma linguaguem, porque ele é apenas interpretado e não compilado)
A sintaxe mais simples do IF no bash é a seguinte:
if [ variavel1 COMPARACAO variavel2 ]; then
comandos
fi
ATENÇÃO Não se esqueça do espaço depois do "[" e antes do "]", deixar eles encostados com as variáveis causa problemas.
PRINCIPAIS OPERADORES
Para Strings
[-n] STRING
Tamanho da String é diferente de zero
-z STRING
Tamanho da String é zero
STRING1 = STRING2
Strings são iguais
STRING1 != STRING2
Strings não são iguais
Para numeros [inteiros]
NUMERO1 -eq NUMERO2
NUMERO1 igual a NUMERO2
NUMERO1 -ge NUMERO2
NUMERO1 igual e/ou mair que NUMERO2
NUMERO1 -gt NUMERO2
NUMERO1 maior que NUMERO2
NUMERO1 -le NUMERO2
NUMERO1 menor e/ou igual a NUMERO2
NUMERO1 -lt NUMERO2
NUMERO1 menor que NUMERO2
NUMERO1 -ne NUMERO2
NUMERO1 diferente de NUMERO2
Exemplos
Exemplo 1 - comparando strings
if [ "texto" = "texto" ]; then
echo "o texto é igual";
fi
Exemplo 2 - comparandos números
if [ 1 -gt 5 ]; then
echo "1 é maior que 5";
fi
Simples não é? Basta saber a sintaxe, traduzindo o código para português ficaria:
se [ "texto" igual "texto" ]; então
imprima "o texto é igual";
fimse
IF ... THEN ... ELSE
Aqui a sintaxe continua a mesma, mas podemos incluir "mais" condições em nossos IFs
Exemplos
Exemplo 1
if [ "texto" = "texto" ]; then
echo "o texto é igual";
else
echo "o texto NÃO é igual";
fi
Exemplo 2
if [ 1 -gt 5 ]; then
echo "1 é maior que 5";
else
echo "1 não é maior que 5";
fi
Exemplo 3
Além do else, podemos utilizar o elif (que seria o elseif em outras lingaguens), que serve para criar uma nova condição dentro do if que somente será executada se o if inicial 'falhar'.
if [ "a" = "3" ] || [ "a" = "b" ]; then
echo "a não é igual a 3 ou c";
elif [ "a" = "c" ] || [ "a" = "d" ]; then
echo "a não é igual a c ou d";
else
echo "A é diferente de 3,c,b,d";
fi
Exemplo 4
if [ 3 -lt 10 ] && [ 3 -gt 7 ]; then
echo "3 é menor que 10 e maior que 7";
elif [ 3 -lt 10 ] && [ 3 -gt 5 ]; then
echo "3 é menor que 10 e maior que 5";
else
echo "3 é menor que 10 e menor que 5";
fi
Loops - While, For, Until
While
O exemplo abaixo é apenas um contador, mas você pode utilizar o while em outras condições, por exemplo, ficar executando comandos enquanto a expressão for verdadeira.
#!/bin/bash
CONTADOR=0
while [ $CONTADOR -lt 10 ]; do
echo "Contador em: $CONTADOR";
let CONTADOR=CONTADOR+1;
done
Traduzindo
enquanto [ $CONTADOR menor que 10 ]; faça
imprima "Contador em: $CONTADOR";
imcremente 1 no $CONTADOR;
feito
For
O exemplo abaixo pode ser útil em várias ocasiões
#!/bin/bash
for i in $( ls ); do
echo item: $i
done
Neste caso ele irá executar o comando ls, pegará seu resultado, e imprimirá na tela arquivo por arquivo, a saída seria algo do tipo:
item: 12dicts-4.0.zip
item: aim
item: aim-proto.zip
item: c++
item: chec.pl
item: concurso
item: d2_backup.sh
item: d2.sh
item: Desktop
item: docs
item: dsniff-2.3
item: dsniff-2.3.tar.gz
item: Firefox_wallpaper.png
item: fotos
item: fwgen.sh
item: gbox_applet-0.7.4
item: gbox_applet-0.7.4.tar.gz
item: hacked.jpg
item: hlbr-0.1-final
item: hlbr-0.1-final.tar.gz
item: IA
item: IMHear-1.0
item: IMHear-1.0.tar.gz
item: InThisWorld
item: libicq-0.33
item: libicq-0.33.tar.gz
item: libnet
item: libnet.tar.gz
item: libnids-1.20
item: libnids-1.20.tar.gz
item: logs
item: mbox
item: MD5SUMS
item: NVIDIA-Linux-x86_64-1.0-8178-pkg2.run
item: openssh-2.2.0-exp.tgz
item: ossec-hids-0.6.tar.gz
item: password
item: propostas
item: resultados
item: resultados.txt
item: root
item: Screenshot1.png
item: senhas_descobertas
item: SHA1SUMS
item: sniffex
item: sniffex.c
item: sorteios.sh
item: ssh-brute.sh
item: wordlist
item: wordlist.php
Until
O until é praticamente igual ao while, se você traduzir, while = enquanto, until = até que. Veja o exemplo:
#!/bin/bash
CONTADOR=20
until [ $CONTADOR -lt 10 ]; do
echo CONTADOR $CONTADOR
let CONTADOR-=1
done
Traduzindo
CONTADOR=20
até que [ $CONTADOR menor 10 ]; faça
imprimita "CONTADOR $CONTADOR"
decremente 1 do CONTADOR
feito
O script será executado até o momento que o contador chegar a ter um valor menor que 10, veja a seção abaixo, Debugando Scripts.
[editar]
Debugando Scripts
Esta é uma dica que muita gente não conhece, mas que é muito útil para encontrar erros em scripts bash, principalmente aqueles beeeeem longos em que ficar dando echo na tela se torna inviável:
Como exemplo vou utilizar o último exemplo do until:
#!/bin/bash
CONTADOR=20
until [ $CONTADOR -lt 10 ]; do
echo CONTADOR $CONTADOR
let CONTADOR-=1
done
Para debugar o script você faz o seguinte:
bash -x arquivo.sh
No nosso caso a saída deve ser:
+ CONTADOR=20
+ '[' 20 -lt 10 ']'
+ echo CONTADOR 20
CONTADOR 20
+ let CONTADOR-=1
+ '[' 19 -lt 10 ']'
+ echo CONTADOR 19
CONTADOR 19
+ let CONTADOR-=1
+ '[' 18 -lt 10 ']'
+ echo CONTADOR 18
CONTADOR 18
+ let CONTADOR-=1
+ '[' 17 -lt 10 ']'
+ echo CONTADOR 17
CONTADOR 17
+ let CONTADOR-=1
+ '[' 16 -lt 10 ']'
+ echo CONTADOR 16
CONTADOR 16
+ let CONTADOR-=1
+ '[' 15 -lt 10 ']'
+ echo CONTADOR 15
CONTADOR 15
+ let CONTADOR-=1
+ '[' 14 -lt 10 ']'
+ echo CONTADOR 14
CONTADOR 14
+ let CONTADOR-=1
+ '[' 13 -lt 10 ']'
+ echo CONTADOR 13
CONTADOR 13
+ let CONTADOR-=1
+ '[' 12 -lt 10 ']'
+ echo CONTADOR 12
CONTADOR 12
+ let CONTADOR-=1
+ '[' 11 -lt 10 ']'
+ echo CONTADOR 11
CONTADOR 11
+ let CONTADOR-=1
+ '[' 10 -lt 10 ']'
+ echo CONTADOR 10
CONTADOR 10
+ let CONTADOR-=1
+ '[' 9 -lt 10 ']'
Os sinais + indicam as instruções que são executadas internamente, onde não tem o sinal é o echo do script. No nosso caso ele executa o loop até que o contador seja menor que 10 (iniciando de 20 e decrementando 1 em cada loop executado)
Funções
Antes de dar alguns exemplos de funções, precisamos entender para que elas são utilizadas, alguns bons motivos são esses:
* Facilidade de manutenção
* Redução do tamanho do script
* Reutilização
Onde utilizar funções
Um excelente lugar para se utilizar funções é um lugares do script onde o mesmo código é repetido várias vezes. Colocando este código em uma função diminui consideravelmente o tamanho do script, além de facilitar manutenções, já que você só vai precisar alterar o código em um lugar.
Neste artigo vou mostrar apenas a sintaxe de funções e dar alguns simples exemplos, futuramente veremos coisas mais sofisticadas.
Exemplos
Exemplo 1. Neste exemplo teremos 2 funções (quit e hello), a função quit executa apenas o comando exit para sair do script, e a função hello imprime na tela a palavra Hello!
#!/bin/bash
function quit {
exit
}
function hello {
echo Hello!
}
hello
quit
Como podemos ver no exemplo acima, basta utilizar o nome da função para "chamá-la"
Exemplo 2. Este exemplo temos a utilização de parâmetros (no caso 1 só)
#!/bin/bash
function quit {
exit
}
function e {
echo $1
}
e Hello
e World
quit
Neste exemplo estamos executando a função "e", duas vezes, na primeira com o parâmetro Hello e na segunda com World, em seguida a função quit é executada e o script termina.
O $1 indica que o primeiro parâmetro passado para a função será utilizado no lugar de $1, no caso, imprimindo Hello e depois World
Conclusão
Espero que tenha sido útil até o momento, em breve estarei disponibilizando novos artigos sobre bash com mais opções, e alguns exemplos realmente úteis

Rafael M. Capovilla - 1c3_m4n - iceman (a) at underlinux.com.br
Retirado de "http://underlinux.com.br/wiki/index.php/Tutoriais/Programacao/bash-part1"
É um prazer para mim poder ajudar o Darkers. Você e o nibbles a meses chamaram-me para ajudar aqui. Por motivos pessoais e profissionais não pude vinr. Agora que cheguei aqui, irei compensar esforços anteriores.
abraços