Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda inglês de uma vez por todas

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

"case" em bash

Colaboração: Rodrigo Bernardo Pimentel

Data de Publicação: 20 de Setembro de 2000

Quando se quer testar uma série de condições, pode-se usar "if", "elif" e "else", como já veiculado em outra dica. Porém, quando o teste é para um mesmo valor de variável, a repetição pode-se tornar inconveniente:

  if [ "$REPOSTA" = "sim" ]; then
          faz_coisas
  
  elif [ "$RESPOSTA" = "nao"]; then
          exit 0
  
  elif [ "$RESPOSTA" = "depende_do_tempo" ]; then
          faz_coisas_se_o_tempo_permitir
  
  elif [ "$RESPOSTA" = "depende_do_humor" ]; then
          faz_coisas_se_o_humor_permitir
  
    ...
  

E por aí vai. As checagens são necessárias, afinal de contas precisamos reagir diferentemente a cada uma das condições. Mas a repetição de 'elif [ "$RESPOSTA" = "..."]; then' torna-se cansativa.

Para esse tipo de problema, existe uma construção em bash chamada "case" (existe também em outras linguagens como C). Sua estrutura é:

  case "$variavel"in
          primeira_opcao)
                  comando1
                  comando2
                  ...
                  ;;
  
          segunda_opcao)
                  outro_comando
                  ainda_outro
                  ...
                  ;;
          ...
  
          *)
                  ultimo_comando
  
  esac

Isso testa "$variavel" com cada uma das opções. Quando achar uma adequada, executa os comandos até ";;" e sai do loop (não tenta outras opções mais adiante). O nosso exemplo com "if" acima ficaria:

  case "$RESPOSTA" in
          sim)
                  faz_coisas
                  ;;
  
          nao)
                  exit 0
                  ;;
  
          depende_do_tempo)
                  faz_coisas_se_o_tempo_permitir
                  ;;
  
          depende_do_humor)
                  faz_coisas_se_o_humor_permitir
                  ;;
  
          *)
                  echo 'NDA!'
  
  esac

Notem que "*" é um "catchall", ou seja, se o valor da variável "RESPOSTA" não for "sim", "nao", "depende_do_tempo" ou "depende_do_humor", serão executandos os comandos após o "*)" (que não precisa terminar em ";;").

Normalmente, os scripts de inicialização do sistema (em /etc/init.d ou /etc/rc.d/init.d, dependendo da distribuição) necessitam de um parâmetro, um dentre "start", "stop", "status", "restart" ou "reload" (às vezes mais). A situação ideal para se usar um "case", certo? O pessoal das distribuições também acha. Portante, se você quiser exemplos de "case", procure nos scripts de inicialização da sua distribuição!

   _____________________________________________________________________________
   Rodrigo Bernardo Pimentel <rbp@sp.conectiva.com.br>|  GPG KeyID: 0x81F85A48
   LinuxSP                 <http://www.linuxsp.org.br>|      Fingerprint:    
   AirGeeks                  <http://www.airgeeks.org>|7E62 9CA2 C95B FC86 B334
   ___________<http://www.conectiva.com.br>___________|203E C011 2E4D 81F8 5A48
   If both chutes fail, track for your rigger!

Veja a relação completa dos artigos de Rodrigo Bernardo Pimentel

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.97/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (986 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

As Palavras Mais Comuns da Língua Inglesa (2ª edição)