
Digamos que tengo un 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
¿Ahora es posible cambiar la línea echo "Something went wrong"
a un comando que se ejecute instantáneamente Option two
sin volver a mostrar el menú de PS3?
Respuesta1
Lo que estás buscando se llama "fall-through", y en case
las declaraciones de bash, el fall-through se realiza usando ;&
en lugar de ;;
. Sin embargo, no puede fallar condicionalmente (es decir, no puede insertar un ;&
en medio de un if
bloque). Le sugiero que falle siempre, y continue
si el código se ejecutó correctamente:
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