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 ;; esac
A 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 0
A 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 0
Nesse 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 0
No 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