Variáveis e comparação

Ao armazenar qualquer texto ou número dentro de uma variável, você passa a poder utilizá-la em qualquer situação no lugar no valor original. A vantagem de fazer isso é que, quando precisar alterar o valor original, você só
vai precisar alterar uma vez. O mesmo script poderia ser adaptado para baixar uma nova versão do Kurumin, ou para baixá-lo a partir de outro mirror simplesmente alterando as duas linhas iniciais. Usar variáveis desta forma permite que seus scripts sejam
reutilizáveis, o que a longo prazo pode representar uma grande economia de tempo.

Para comparar duas variáveis (contendo texto) num shell script, usamos o símbolo “!=” (não igual, ou seja: diferente). Para saber se o arquivo foi baixado corretamente, comparamos as
duas variáveis: [ “$md5sum” != “$md5sumOK” ].

Além do “!=”, outros operadores lógicos que podem ser usados são:

= : Igual.
-z : A variável está vazia (pode ser usada para verificar se determinado comando gerou algum erro, por exemplo).
-n : A variável não está vazia, o oposto do “-z”.

Estas funções permitem comparar strings, ou seja, funcionam em casos onde as variáveis contém pedaços de texto ou o resultado de comandos. O bash também é capaz de trabalhar com números e inclusive realizar operações
aritméticas. Quando precisar comparar duas variáveis numéricas, use os operadores abaixo:

-lt : (less than), menor que, equivalente ao <.
-gt : (greather than), maior que, equivalente ao >.
-le : (less or equal), menor ou igual, equivalente ao <=.
-ge : (greater or equal), maior ou igual, equivalente ao >=.
-eq : (equal), igual, equivale ao =.
-ne : (not equal) diferente. Equivale ao != que usamos a pouco.

Mas, apenas comparar não adianta. Precisamos dizer ao script o que fazer depois. Lembre-se de que os computadores são burros, você precisa dizer o que fazer em cada situação. Neste caso temos duas possibilidades: o md5sum
pode estar errado ou certo. Se estiver errado, ele deve baixar o arquivo de novo, caso contrário não deve fazer nada.

Usamos então um “if” (se) para criar uma operação de tomada de decisão. Verificamos o mds5um, se ele for diferente do correto, então (then) ele
vai deletar o arquivo danificado e começar o download de novo. Caso contrário (else) ele vai simplesmente escrever uma mensagem na tela.

if [ "$md5sum" != "$md5sumOK" ]; then
    echo "Arquivo corrompido, vou deletar e começar novamente."
    rm -f kurumin-"$versao".iso
    sleep 120
    ./baixar-kurumin.sh
else
    echo "O arquivo foi baixado corretamente."
fi

Veja que dentro da função “then” usei o comando para deletar o arquivo e depois executei de novo o “./baixar-kurumin.sh” que vai executar nosso script de novo, dentro dele mesmo.

Isso vai fazer com que o script fique em loop, obsessivamente, até conseguir baixar o arquivo corretamente. Uma coisa interessante nos scripts é que eles podem ser executados dentro deles mesmos e alterados durante a
execução. O script pode até mesmo deletar a si próprio depois de rodar uma vez, uma espécie de script suicida :-P.

É preciso tomar cuidado em situações como esta, pois cada vez que o script executa novamente a si mesmo para tentar baixar o arquivo, é aberta uma nova seção do shell, o que consome um pouco de memória. Um script que
entrasse em loop poderia consumir uma quantidade muito grande de memória, deixando o sistema lento. Para evitar isso, incluí um “sleep 120”, que faz o script dar uma pausa de 120 segundos entre cada tentativa.

Os scripts são muito úteis para automatizar tarefas, que demorariam muito para serem realizas automaticamente. Imagine que você tem uma coleção de arquivos MP3, todos encodados com 256k de bitrate. O problema é que você
comprou um MP3Player xing-ling, que só é capaz de reproduzir (com qualidade) arquivos com bitrate de no máximo 160k. Você decide então reencodar todas as músicas para 128k, para ouvi-las no MP3player.

Existem vários programas gráficos que permitem fazer a conversão, entre eles o Grip. Mas, esse é o tipo de coisa que é mais rápido de fazer via linha de comando, usando o lame, como em:

$ lame -b 128 musica.mp3 128k-musica.mp3

Aqui é gerado o arquivo “128k-musica.mp3” (na mesma pasta), encodado com 128k de bitrate, sem modificar o arquivo original.

Para fazer o mesmo com todos os arquivos no diretório, você poderia usar o comando “for”, que permite realizar a mesma operação em vários arquivos de uma vez. Ele é muito usado para renomear ou converter arquivos em massa,
baseado em determinados critérios. No nosso caso ele poderia ser usado da seguinte forma:

for arquivo in *.{mp3,MP3}
do
    lame -b 128 "$arquivo" "128k-$arquivo"
done

Aqui, a regra se aplica a todos os arquivos dentro do diretório atual que tiverem extensão “.mp3” ou “.MP3”. Para cada um dos arquivos é executado o comando ‘lame -b 128 “$arquivo” “128k-$arquivo”‘, onde o “$arquivo” é
substituído por cada um dos arquivos dentro do diretório.

Estes dois exemplos são scripts simples, que simplesmente executam alguns comandos, sem oferecer nenhum tipo de interatividade. Se você quisesse que o primeiro script baixasse outro arquivo, teria que editá-lo
manualmente.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X