Pular para o conteúdo

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

Dica publicada em Shell Script / Miscelânea
Perfil removido removido
Hits: 17.967 Categoria: Shell Script Subcategoria: Miscelânea
  • Indicar
  • Impressora
  • Denunciar

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.

Iniciando sistema no modo gráfico ou modo texto (configurando "runlevel" padrão no Systemd)

Instalando e configurando o modem HSF Conexant no Big Linux 3.0

Instalando o aMSN 0.97.2 no Slackware 12 sem compilar nada

Tenha a interface do ReactOS no Wine

Como instalar o NetBeans 8.2 no Ubuntu [Vídeo]

IP em modo texto (modem router)

Problema ao criar scripts com Kommander 1.3 no Slackware Linux?

Comunicação entre aplicativos com o qdbus no KDE 4

Twittar via terminal no Linux

Formas de Obter as Dimensões do Emulador Terminal

#1 Comentário enviado por julio_hoffimann em 19/04/2013 - 10:41h
Mais uma dica interessante. ;-)

[]'s

Contribuir com comentário

Entre na sua conta para comentar.