Uma instrução 'case' do Linux pode ter um conceito 'ou'?

0

O Linux pode usar o case como muitos idiomas, então:

case ${x} in
    one)
        echo "1"
        ;;
    two)
        echo "2"
        ;;
esac

Você pode fazer o mesmo com $ x ou $ y ? Então, imaginativamente:

case ( ${x} or ${y} ) in
    one)
        echo "1"
        ;;
    two)
        echo "2"
        ;;
esac

Isso significa que, se $ x ou $ y contiver um ou dois , então 1 ou 2 é impresso respectivamente.

    
por HugMyster 13.06.2017 / 12:17

3 respostas

3

Não, mas você pode repetir os valores e o caso:

for v in "$x" "$y"; do 
    case "$v" in
    one) echo "1"; break ;;
    two) echo "2"; break ;;
    esac
done

Isso imprimiria 1 ou 2 para o primeiro de $x e $y correspondentes. Claro que o que fazer se ambos coincidirem, depende de você decidir.

    
por 13.06.2017 / 12:23
1

Se você souber quais valores possíveis $x e $y terão, você pode criar strings como "$x$y" e procurar padrões glob, por exemplo:

case $x$y in
    *one*) echo "1" ;;
    *two*) echo "2" ;;
esac
    
por 13.06.2017 / 12:44
1

Se houver um caractere que não possa aparecer em qualquer valor das variáveis, você poderá usar este caractere como um separador. Por exemplo, suponha que você tenha determinado que nem o valor de x nem o valor de y podem conter um cólon

case ":${x}:${y}:" in
    *:one:*)
        echo "1"
        ;;
    *:two:*)
        echo "2"
        ;;
esac

Isso se adapta facilmente a um número variável de strings. Mas lembre-se de que você precisa encontrar um caractere (aqui : ) ou até mesmo uma sequência de caracteres que possivelmente não possam ocorrer nas strings que você está testando.

    
por 15.06.2017 / 03:12

Tags