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

Publicado por Perfil removido em 19/04/2013

[ Hits: 16.965 ]

 


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

Liberando conexão (Limewire)

Instalando o Glances no openSUSE 13.2

Detecção automática de impressora no Linux

Instalando Navegador Chromium no Debian 12

Webcam no Ubuntu 7.10 utilizando driver binário spca5xx

Leitura recomendada

Problema ao criar scripts com Kommander 1.3 no Slackware Linux?

Selecionando registros de um arquivo texto com o awk

Resolvendo problemas ao montar SMBFS

Configurando acesso à VPN no Ubuntu Linux

Telinha simples de loading.... em Shell Script

  

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