shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Fw: [Dicas-L]"case" em bash


From: Eriberto
Subject: Fw: [Dicas-L]"case" em bash
Date: Wed, 20 Sep 2000 06:09:53 -0300

----- Original Message -----
From: "Rubens Queiroz de Almeida #200503# " <address@hidden>
To: <address@hidden>
Sent: Wednesday, September 20, 2000 1:30 AM
Subject: [Dicas-L]"case" em bash


> "case" em bash
> ---------------------------------------------------------------------
> Colaboração: Rodrigo Bernardo Pimentel <address@hidden>
>
> 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 <address@hidden>|  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!
>
> ---------------------------------------------------------------
> As mensagens da lista Dicas-L são veiculadas diariamente
> para 10545 assinantes.
>
> Para sair ou assinar a lista Dicas-L, consulte o documento que
> se encontra em http://www.Dicas-L.unicamp.br/FAQ.html.
>
> A redistribuição desta e outras mensagens da lista Dicas-L pode
> ser feita livremente, deste que o conteúdo, inclusive esta nota,
> não sejam modificados.
> ---------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]