|
|||||||
| Wiki | Classificados | Galeria | Reviews | Jogos | Comunidades | RSS Feeds | FAQ | Termos de Uso | Sobre |
| Cadastre-se | Fotos | Blogs | Lista de Membros | Calendário | Pesquisar | Mensagens de Hoje | Marcar Fóruns Como Lidos |
FerramentasPublicidade |
From UnderLinux Wiki
[editar] Iniciando em Bash - Condicionais, Loops, Funções, Debugando Scripts[editar] 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:
file arquivo.sh Ele irá retornar o seguinte: arquivo.sh: Bourne-Again shell script text executable
[editar] CondicionaisA princípio veremos apenas o uso do if, com textos, números ou variáveis [editar] IF ... THENA 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. [editar] PRINCIPAIS OPERADORESPara 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
[editar] ExemplosExemplo 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
[editar] IF ... THEN ... ELSEAqui a sintaxe continua a mesma, mas podemos incluir "mais" condições em nossos IFs [editar] ExemplosExemplo 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 [editar] Loops - While, For, Until[editar] WhileO 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 [editar] ForO 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 [editar] UntilO 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 ScriptsEsta é 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) [editar] FunçõesAntes de dar alguns exemplos de funções, precisamos entender para que elas são utilizadas, alguns bons motivos são esses:
[editar] Onde utilizar funçõesUm 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. [editar] ExemplosExemplo 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 [editar] ConclusãoEspero 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 |