[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.
> ---------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Fw: [Dicas-L]"case" em bash,
Eriberto <=