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

Publicado por Perfil removido em 19/04/2013

[ Hits: 16.776 ]

 


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

Linux - o aMSN é compatível com sua webcam?

Como instalar e remover o Comodo antivírus no Ubuntu

Criação de pacotes .deb

Instalando o Adobe Reader em Português no Kurumin

Vídeo-aula: Como instalar o Limewire (.deb)

Leitura recomendada

Como mudar o teclado do Debian em uma máquina virtual configurada em outro SO

Comentar em bloco

Comando para listar usuários Samba

Sistema de backup em shell script

Comparar pasta origem com pasta destino e copiar os arquivos que faltam

  

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