Linux - Estrutura case
A estrutura case permite comparar uma expressão (como uma variável) com uma série de valores. Se a expressão corresponder a um valor específico, um conjunto de comandos será executado. A sintaxe geral da estrutura é a seguinte:
case expressão in
valor1)
conjunto_comandos1
;;
valor2)
conjunto_comandos2
;;
valorN)
conjunto_comandosN
;;
esacA estrutura começa com a palavra case e termina com a palavra esac. Após case, vem a expressão (como uma variável) que será comparada com um conjunto de valores.
Cada bloco de valor possui o seguinte formato:
valor) comando ;;
Vamos considerar um exemplo simples. Definimos o script hello com o seguinte código:
#!/bin/bash
# Script que utiliza a estrutura case
# variável cujo valor será comparado com um conjunto de valores
num=2
case $num in
1)
echo "num = 1"
;;
2)
echo "num = 2"
;;
3)
echo "num = 3"
;;
esac
echo "Fim do programa"
exit 0A variável num é igual a 1, e o primeiro bloco na estrutura case será executado:
1) num=2 # alterando o valor da variável echo "num = 1" ;;
Mesmo que o valor da variável num seja alterado para 2, o bloco subsequente destinado ao valor 2 não será executado, como podemos ver ao executar o script:
programicio@Programicio:~$ bash hello num = 1 Fim do programa
Valor Padrão
No exemplo acima, o valor da variável foi comparado com três números. No entanto, o valor da variável pode representar outros números. Se num fosse igual a 4, nenhum dos blocos de comandos seria executado. Às vezes, é necessário tratar todos os outros casos, ou seja, executar um conjunto de comandos padrão. Nesse caso, podemos usar o caractere *, que corresponde a qualquer valor:
#!/bin/bash
# Script que utiliza a estrutura case
# variável cujo valor será comparado com um conjunto de valores
num=4
case $num in
1)
echo "num = 1"
;;
2)
echo "num = 2"
;;
*)
echo "Valor desconhecido"
;;
esac
echo "Fim do programa"
exit 0Nesse caso, se a variável num não for igual a 1 nem a 2, o comando echo "Valor desconhecido" será executado. Vamos testar o script:
programicio@Programicio:~$ bash hello Valor desconhecido Fim do programa
Também é possível verificar vários valores em um único bloco. Para isso, separam-se os valores comparados com a barra vertical |. Por exemplo:
#!/bin/bash
# Script que utiliza a estrutura case
# variável cujo valor será comparado com um conjunto de valores
num=2
case $num in
1|2|3)
echo "num é igual a 1, 2 ou 3"
;;
4)
echo "num é igual a 4"
;;
*)
echo "Valor desconhecido"
;;
esac
echo "Fim do programa"
exit 0No primeiro bloco, comparamos num com três números: 1, 2 ou 3. Ou seja, o primeiro bloco de comandos será executado se a variável num for igual a 1, 2 ou 3. Resultado da execução do script:
programicio@Programicio:~$ bash hello num é igual a 1, 2 ou 3 Fim do programa