Artigos > Controle de fluxo no CLI com operadores lógicos

420 Views
Tempo de leitura: 2 Minutos 
Atualizado em:

Há quem diga que existem duas formas para se fazer algo; a forma correta e a forma errada.

Em se tratando de Linux, digo que há uma vertente na forma correta: a forma correta e com elegância.

O Linux é flexível ao ponto de nos permite realizar tarefas de várias formas distintas.

Vou falar um pouco sobre operadores lógicos, o que nos permitem várias linhas de código, ciclos de CPU e consumo desnecessário de memória, além do nosso precioso tempo.

Os operadores lógicos são:

&& Só executa o comando2 se o comando1 for bem sucedido
|| Só executa comando2 se o comando1 for mal sucedido.

Operador lógico “&&”

O Operador “&&” representa um “E” lógico, de forma que só executará o comando seguinte se o comando anterior for bem sucedido.

Portanto, para que todos os comandos sejam executados, é preciso ter êxito em todos eles.

Exemplo:

grep fulano /etc/passwd && mkdir /home/fulano

No exemplo anterior, é verificado se o usuário “fulano” exite no sistema. Se sim, é criado o diretório “/home/fulano”. Caso o usuário não exista, o comando “mkdir” simplesmente não será executado.

Vejamos como faríamos isso em um Shell Script:

#!/bin/bash

if [ $(grep fulano /etc/passwd) ]; then
   mkdir /home/fulano
fi

Note que se trata de um exemplo simples. Em alguns casos mais complexos, com uso de comandos como “sed”, “awk”, entre outros, a quantidade de linhas de código poupadas chega a ser enorme.

Operador lógico “||”

O Operador “||” representa o “Ou” lógico. Portanto, executará os comandos até que um dos comandos seja bem sucedido. Assim que tiver uma saída com sucesso, interrompe a sequência de comandos.

Exemplo I:

grep fulano /etc/passwd || grep sicrano /etc/passwd || grep beltrano /etc/passwd

Aqui serão consultados 3 usuários no arquivo “/etc/passwd” com 3 “grep”. Porém, a sequência é interrompida caso o primeiro usuário seja localizado.

Para se ter ideia do quanto isso é prático, vejamos um Shell Script que faria essa mesma ação:

#!/bin/bash

fulano="$(grep fulano /etc/passwd)"
sicrano="$(grep sicrano /etc/passwd)"
beltrano="$(grep beltrano /etc/passwd)"

if [ ! -z $fulano ]; then

    echo $fulano

elif [ ! -z $sicrano ]; then

    echo $sicrano

elif [ ! -e $beltrano ]; then

    echo $beltrano

else

    echo "usuarios nao encontrados"

fi

Exemplo II:

dpkg -l pacote || apt-get instal pacote -y --force-yes

No exemplo acima, verifico se “pacote” está instalado. Se o comando “dpkg” não for bem sucedido, significa que o “pacote” não está instalado, e neste caso executará o “apt-get” para instalá-lo.

Conclusão

Dominar esses operadores é simples e muito prático, requisito pra quem trabalha na tela preta do Linux.

0 - 0

Thank You For Your Vote!

Sorry You have Already Voted!