como usar "joker" ou curinga em padrões de string (espaços separados palavras) em uma instrução de caso bash?

2

Como usar a instrução "case" do bash para padrões de string "muito específicos" (várias palavras, incluindo espaços)?

O problema é: eu recebo uma String de várias palavras de uma função que é bastante específica, incluindo um número de versão. O número da versão agora muda de tempos em tempos. Em vez de adicionar mais e mais padrões de string específicos à minha declaração de caso, eu gostaria de usar um joker (ou qualquer que seja a palavra para isso, como "Ubuntu 16.04.? LTS" ou "Ubuntu 16.04. * LTS"). não encontrou nenhuma solução para isso ainda.

Veja este script de shell que usei até agora:

    .
    .
    .
    case "${OS}" in
    "SUSE Linux Enterprise Server 11 SP4")
        echo "SLES11 detected."
        ;;
    "Ubuntu 16.04.3 LTS" | "Ubuntu 16.04.4 LTS"     )
        echo "UBUNTU16 detected."
        ;;
    "CentOS Linux 7 (Core)")
        echo "CENTOS7 detected."
        ;;
    *)
        echo "Unknown OS detected. Quitting for safety reasons."
        exit -1
        ;;
    .
    .
    .
    
por Axel Werner 03.04.2018 / 15:58

1 resposta

2

Você pode usar padrões em declarações de caso, no entanto, você não pode citá-los para que você tenha que escapar do espaço em branco.

case ${OS} in
"SUSE Linux Enterprise Server 11 SP4")
    echo "SLES11 detected."
    ;;
Ubuntu\ 16.04.[3-4]\ LTS)
    echo "UBUNTU16 detected."
    ;;
"CentOS Linux 7 (Core)")
    echo "CENTOS7 detected."
    ;;
*)
    echo "Unknown OS detected. Quitting for safety reasons."
    exit -1
    ;;
    
por 03.04.2018 / 16:00