if/then/elif/else - Escrevendo de outra maneira em bash

Publicado por Perfil removido em 19/04/2013

[ Hits: 15.232 ]

 


if/then/elif/else - Escrevendo de outra maneira em bash



Sobre um outro modo de escrita do if/then/else/elif em bash. Será falado porque a preferência geral é pelos ifs aninhados.

Este modo já me era familiar. Constatei que foi usado dentro dos scripts de inicialização do GNU/Linux. E já se foram alguns anos, desde então...

A forma comum dos if, segue a seguinte escrita:

if [ <condição1> ]; then
instrução1;
instrução2;
instrução3;
...
elif [ <condição2>
instrução4;
instrução5;
instrução6;
...
else
instrução7;
instrução8;
instrução9;
...
fi.


A forma exibida agora, usa o duplo colchete [[ do bash, bem como os sinais && e ||:

[[ <condição> ]] && {
instrução1;
instrução2;
instrução3;
...
}


O duplo colchete funciona da mesma forma que um if e retorna 0, conforme os comandos que são "bem concluídos", ou que foram feitos pra retornar 0 (geralmente se tudo esteve bem).

No caso, este colchete retorna 0 se <condição> for verdadeira. Senão retorna 1.

Como o par &&, dá prosseguimento ao próximo comando se o anterior retornou 0, então, ele só executa esse próximo comando se a condição dos colchetes for verdadeira.

Ele ainda admite sequências de instruções em blocos agrupados por chaves {}. De certa forma me lembrou C/Perl.

Se a condição não é satisfeita, ele teria que executar o que estivesse num else (leia-se após falha). Comandos ligados pelo par || são executados dessa forma.

Fica:

[[ <condição1> ]] && {
instrução1;
instrução2;
instrução3;
...
} || {
instrução7;
instrução8;
instrução9;
...
}

elif estaria por conta de uma novo duplo colchete em seguida do ||:

[[ <condição1> ]] && {
instrução1;
instrução2;
instrução3;
...
} || [[ <condição2> ]] && {
instrução4;
instrução5;
instrução6;
...
} || {
instrução7;
instrução8;
instrução9;
...
}


Conclusão

  • Esse modo de escrita existe e funciona.
  • Alguém realmente usou/usa isso na inicialização de alguma distribuição?
  • É estranho se comparado com o tradicional if.
  • Não sei de estilo de escrita adequado pra esse modo.
  • A legibilidade parece ser subjetiva e associada ao estilo de escrita.
  • Procurei mostrar a existência do modo, deixando qualquer possibilidade de elegância para segundo plano.
  • O fato de lembrar Perl, é por causa dos comandos/operadores and e or, de função muito similar.

Outras dicas deste autor

Falta de Codecs de Áudio e Vídeo no Debian [RESOLVIDO]

Login automático no SSH com chave criptográfica mais segura

Compartilhamento básico de Internet com Linux

Criando pastas em massa rapidamente no Linux

Instalando modem SmartLink SL2800 no Slackware 12

Leitura recomendada

Bash: Não use if

Trocando letrinhas em segundos (sed)

Renomeando extensões de centenas de arquivos de uma só vez

SBoupgrade - Atualize seu SlackBuild!

Habilitando X11 via SSH no Slackware

  

Comentários
[1] Comentário enviado por julio_hoffimann em 19/04/2013 - 10:41h

Mais uma dica interessante. ;-)

[]'s



Contribuir com comentário