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.