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

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

Re: [shell-script] Construção de CASE Complexa


From: Rodrigo Amorim Ferreira | CODECOMMUNITY
Subject: Re: [shell-script] Construção de CASE Complexa
Date: Sat, 09 Jul 2016 14:02:02 -0300

Oi Julio,

Interessantíssimo :) Acredito que vou conseguir criar algo que envolva
sua sugestão com as do Tiago e do Itamar. Assim que tiver avançado no
projeto (i. é: pelo menos no script principal do programa que envolve o
uso "massivo" do case) volto a repassar os avanços aqui na lista.

Agradeço a ajuda.

Um abraço.

Rodrigo


On Sat, 2016-07-09 at 13:18 -0300, 'Julio C. Neves'
address@hidden [shell-script] wrote:
>   
> Fala Rodrigo,
> a partir do bash 4.0, além do terminador ;; tb temos mais dois:
> 
> 
> ;;& sai do bloco, mas não sai do case, testa as outras condições;
> ;&  sai do bloco, mas não sai do case, executa obrigatoriamente a
> próxima condição.
> 
> 
> function caractere
> {
> case $1 in
>    [[:alpha:]]) echo -n "Letra " ;;&
>    [[:lower:]]) echo minúscula   ;;
>    [[:upper:]]) echo maiúscula   ;;
>    *) echo não é letra
> esac
> }
> 
> 
> $ caractere a
> Letra minúscula
> $ caractere X
> Letra maiúscula
> $ caractere 1
> não é letra
> 
> 
> Creio que assim fica mais fácil, já que vc consegue fazer o or, usando
> o terminador ;;& e então basta fazer o and.
> 
> Abcs,
> Julio
> @juliobash
> 
> Próximos cursos de Shell
> Cidade         Local Período
> 
>
> São Paulo 4Linux 25
> -29/07
> 
> Dou treinamento de Shell em qualquer cidade.
> 
> Para mais detalhes, me mande um e-mail.
>         > 
> 
> 
> Em 9 de julho de 2016 02:04, address@hidden [shell-script]
> <address@hidden> escreveu:
>           
>         Oi Pessoal,
>         
>         Boa madrugada! Antes de mais nada, peço desculpas antecipadas
>         caso a lista receba mais de uma mensagem minha sobre o mesmo
>         tema, pois me parece que não está funcionando o envio de
>         mensagens diretamente de minha conta de email e estou
>         re-enviando essa cópia através do painel de controle do Yahoo
>         Groups. Alguém saberia de algum problema, ou bloqueio?
>         
>         
>         DÚVIDA SOBRE CONDICIONAL DO TIPO CASE
>         
>         
>         Gostaria de tirar uma dúvida: é possível criar um tipo
>         condicional case
>         com opções AND e OR misturadas em cada opção de padrão a ser
>         analisado?
>         
>         Exemplos: eu sei que e possível criar um tipo condicional case
>         básico
>         como:
>         
>         case $1 in
>           -p)
>             echo "Opção 1"
>             ;;
>           -s)
>             echo "Opção 2"
>             ;;
>           -f)
>             echo "Opção 3"
>             ;;
>            *)
>             echo "Modo de uso: nome_do_programa {-spf}"
>         esac
>         
>         Neste caso ele analisa o uso do executável com apenas uma
>         opção:
>         
>           $ nome_do_programa -p
>           Opção 1
>           $ nome_do_programa -s
>           Opção 2
>           $ nome_do_programa -f
>           Opção 3
>         
>         Eu sei que é possível expandir o uso das opções, de cada
>         padrão a ser
>         analisado, com o OR:
>         
>         case $1 in
>           -p|--project)
>             echo "Opção 1"
>             ;;
>           -s|--subproject)
>             echo "Opção 2"
>             ;;
>           -f|--file)
>             echo "Opção 3"
>             ;;
>            *)
>             echo "Modo de uso: nome_do_programa {-spf}"
>         esac
>         
>         O que permite ele funcionar para os seguintes casos:
>         
>           $ nome_do_programa -p
>           Opção 1
>           $ nome_do_programa --project
>           Opção 1
>           $ nome_do_programa -s
>           Opção 2
>           $ nome_do_programa --subproject
>           Opção 2
>           $ nome_do_programa -f
>           Opção 3
>           $ nome_do_programa --file
>           Opção 3
>         
>         E também sei que é possível utilizar AND para evitar (ao
>         máximo) o uso
>         de condicionais do tipo case aninhadas, como:
>         
>         case $1:$2:$3 in
>           -p:-s:-f)
>             echo "Opção 1, 2 e 3 simultâneas"
>             ;;
>            *)
>             echo "Modo de uso: nome_do_programa {-s -p -f}"
>         esac
>         
>         que responderia da seguinte maneira:
>         
>           $ nome_do_programa -p -s -f
>           Opção 1, 2 e 3 simultâneas
>         
>         Mas não descobri como fazer (se é realmente possível) o uso do
>         AND e do
>         OR simultâneo em cada opção de padrão a ser analisado pelo
>         tipo
>         condicional case. É possível criar uma opção de padrão que
>         misture
>         ambas? Algo como (eu sei que não funciona):
>         
>         -p|--project:-s|--subproject:-f|--file)
>         
>         que permitisse gerar resultados como:
>         
>           $ nome_do_programa -p -s -f
>           Opção 1, 2 e 3 simultâneas
>           $ nome_do_programa --project -s -f
>           Opção 1, 2 e 3 simultâneas
>           $ nome_do_programa -p --subproject -f
>           Opção 1, 2 e 3 simultâneas
>           $ nome_do_programa -p -s -file
>           Opção 1, 2 e 3 simultâneas
>           $ nome_do_programa --project --subproject -f
>           Opção 1, 2 e 3 simultâneas
>           $ nome_do_programa --project -s --file
>           Opção 1, 2 e 3 simultâneas
>           $ nome_do_programa -p --subproject --file
>           Opção 1, 2 e 3 simultâneas
>           $ nome_do_programa --project --subproject --file
>           Opção 1, 2 e 3 simultâneas
>         
>         Estou tentando ao máximo obter opções de construção de
>         programas em
>         shell com o uso do tipo condicional case para não precisar
>         utilizar
>         (muito) a sua forma aninhada e tentar manter o código o mais
>         "simples"
>         possível.
>         
>         Também acredito que posso estar redondamente enganado, e essa
>         linha de
>         raciocínio pode vir a complicar meu projeto mais à frente. Por
>         isso
>         qualquer solução alternativa que mude minha linha de
>         desenvolvimento e
>         torne o programa melhor (e mais legível) também é muito bem
>         vinda.
>         
>         Desde já agradeço a ajuda.
>         
>         Saudações.
>         
>         Rodrigo Amorim
>         
>         
>         
>         
> 
> 
> 




reply via email to

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