É possível rodar o próximo caso PS3 do caso anterior?

2

Digamos que eu tenha um script como este:

#!/bin/bash
PS3='Select option: '
options=("Option one" "Option two")
select opt in "${options[@]}"
do
    case $opt in
    "Option one")
    # few lines of code
    if [ "check that code did everything it was supposed to do" ]
        then
        echo "Completed"
        else
        echo "Something went wrong"
    fi
    ;;

    "Option two")
    # more code
    ;;
    esac
done

Agora é possível alterar a linha echo "Something went wrong" para o comando que executa instantaneamente Option two sem mostrar o menu PS3 novamente?

    
por PKM 01.01.2017 / 21:11

1 resposta

3

O que você está procurando é chamado de "fall-through", e nas instruções case do bash, o fall-through é feito usando ;& em vez de ;; . No entanto, você não pode inserir condicionalmente (ou seja, não é possível inserir um ;& no meio de um bloco if ). Eu sugiro que você passe sempre, e continue se o código for executado com sucesso:

case $opt in
"Option one")
# few lines of code
if [ "check that code did everything it was supposed to do" ]
then
    echo "Completed"
    continue
else
    echo "Something went wrong"
fi
;&

"Option two")
# more code
;;
esac
    
por muru 02.01.2017 / 07:29