Shell Script: Básico de Controle de Fluxo

Dicas - 19/Out/2020 - por André Kanamura

Falamos anteriormente neste artigo sobre alguns conceitos básicos de Shell Script. Aqui vamos falar um pouco de como podemos trabalhar com controle de fluxo.

if, elif, else

Em Shell temos if, else e elif. A estrutura de um bloco de controle de fluxo poderia ficar mais ou menos assim:

if [[ $alguma_coisa ]]; then
  echo "Faz alguma coisa"
elif [[ $outra_coisa ]]; then
  echo "Faz outra coisa"
else
  echo "Faz ainda outra coisa"
fi

Sabendo como deve ser a estrutura do código, vamos conhecer os operadores para comparar valores.

Comparações com números

Para comparar números, temos disponíveis os seguintes operadores:

  • Igual à (equal): -eq
  • Diferente de (not equal): -ne
  • Menor que (less than): -lt
  • Maior que (greater than): -gt
  • Menor ou igual à (less or equal): -le
  • Maior ou igual à (greater or equal): -ge

Comparações com texto

Para trabalhar a comparação de strings, temos disponíveis os seguintes operadores:

  • Igual à: =
  • Diferente de: !=
  • String não é vazia: -n
  • String é vazia: -z ## Um exemplo simples
#!/bin/bash

while [[ -z "$resposta" ]]; do
  echo "Digite um número"
  read resposta
done

VALOR=$(($resposta % 2))

if [[ $VALOR -eq 0 ]]; then
  echo "Número é par"
else
  echo "Número é impar"
fi

No código acima, primeiro temos um loop while que aguarda o input de um número no terminal. Enquanto a resposta for vazia ([[ -z "$resposta" ]]), o terminal vai continuar solicitando esse dado. O ideal seria que o valor do input fosse validado, para garantir que é um número e não uma letra, mas vamos considerar que a pessoa sempre vai colocar um número para simplificar. ;)

Depois de inserido um valor para resposta, armazenamos na variável VALOR o resto da divisão de resposta por 2. Em seguida, temos o bloco if/else que compara VALOR a zero ([[ $VALOR -eq 0 ]]) e imprime em tela uma mensagem de acordo com o resultado dessa comparação.

Referências

Foto de perfil do autor
André Kanamura

Dev na Campus Code