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

Publicado por Perfil removido em 19/04/2013

[ Hits: 16.753 ]

 


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

Consertando o MySQL

Instalei o FreeBSD e esqueci a senha de root

Couldn't load target 'ETH0':/lib/xtables/libipt_ETH0.so

Traduzindo programas no Ubuntu 7.04

Instalação do LibreOffice 3.3 Final na distribuição GNU/Linux Ubuntu 10.10

Leitura recomendada

Utilizando o pastebin pelo terminal Linux

Comando para listar usuários Samba

Repositórios YUM para Red Hat, Fedora e CentOS - Instalação via Script

Wolfenstein Enemy Territory no Ubuntu 12 com som e Omnibots

Lendo registros formatados de arquivo de texto em bash

  

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

Mais uma dica interessante. ;-)

[]'s



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts