Cassic

Usando o CASE no Shell

Autor: Bruno Lopes


  O comando CASE executa uma ação caso o conteúdo de uma variável case com uma palavras. Ele é usado da seguinte forma:

  case "$variavel" in
   texto1) comandos que serão executados;;
   texto2) comandos que serão executados;;
   texto3) comandos que serão executados;;
  esac

  Repare que após as listas de comandos a serem executadas existem sempre ";;" isso mostra ao case, que todos comandos a ser executados já foram executados, sem o ";;" o script simplesmente mostrará erros e não funcionará. Exemplo:

exemplo_case.sh
echo "Digite Oi, Tchau, Amor ou Odiar"
read texto
case "$texto" in
   Oi)
   echo "Oi! Td bom?"
   ;;
   Tchau)
   echo "Tchau. Até Mais!"
   ;;
  
   Amor) echo "Eu amo você";;
   Odiar) echo "Eu não odeio você";;
   *) echo "Você não digitou nenhuma das opções";;
esac

  O Case verifica o conteúdo da variável "$texto" se for igual a "Oi" ele escreverá "Oi! Td bom?". Se for diferente ele segue em frente e verifica se "$texto" é igual a "Tchau"... e assim por diante... Se o case não achar nenhum texto que case com a variável, ele mostrará "Você não digitou nenhuma das opções". Isso porque o "*" diz para o Case executar a ação com qualquer valor que tenha a variável "$texto". "Veja que escrevi os ';;' em qualquer lugar e dei ENTER" entre alguns comandos que serão executados. Fiz isso apenas para mostrar que pode-se deixar o ";;" em qualquer lugar, mas é obrigatório que ele esteja lá ;)

  Dá para fazer a mesma coisa que o CASE faz com IF, mas é muito mais complicado. Veja como ficaria um substituto para o case:

usando_if.sh
if [ "$texto" = "Oi" ]
then
   echo "Oi! aaTd bom?"
elif [ "$texto" = "Tchau" ]
then
   echo "Tchau. Até Mais!"
elif [ "$texto" = "Amor" ]
then
   echo "Eu amo você"
elif [ "$texto" = "Odiar" ]
then
   echo "Eu não odeio você"
else
echo "Você não digitou nenhuma das opções"
fi