
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 mudar de linha echo "Something went wrong"
para comando que é executado instantaneamente Option two
sem mostrar o menu do PS3 novamente?
Responder1
O que você está procurando é chamado de "fall-through" e, nas case
instruções do bash, o fall-through é feito usando ;&
em vez de ;;
. No entanto, você não pode fazer fall-through condicionalmente (ou seja, não pode inserir a ;&
no meio de um if
bloco). Eu sugiro que você sempre falhe, 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