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

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

Construção de CASE Complexa


From: code
Subject: Construção de CASE Complexa
Date: 08 Jul 2016 22:04:08 -0700

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]