En la secuencia de comandos a continuación, que solicita al usuario que confirme que desea continuar con la ejecución de una secuencia de comandos potencialmente mala, cuando el usuario ingresa Yen el indicador, saldrá del casebloque, solo para ser enviado nuevamente al whilebucle.
#! /bin/bash
set -e
echo
echo "bad install start"
echo "-----------------------------------------"
while true; do
read -p "this script will probably fail - do you want to run anyway?" yn
case $yn in
[Yy]*)
##### WHAT GOES HERE?? #####
;;
[Nn]*)
exit ;;
*)
echo "answer y or n" ;;
esac
echo "script has broken out of case back into while loop"
done
echo -e "\e[33m Installing bad packagename \e[0m"
apt-get install sdfsdfdfsd
echo "rest of script - will i keep running?"
Cuando nse ingresa, el script existe completamente como se desea. Me gustaría saber cómo hacer para que cuando Yse ingresa se rompe el guión en voz tanto de la case y el mientras que el bloque, pero no sale del todo. ¿Hay algo que pueda poner para que el marcador de posición ("¿Qué pasa aquí?") Haga eso?
bash
shell-script
the_velour_fog
fuente
fuente

[Yn]*); Probablemente quisiste decir[Yy]*).$TEST=1debería serTEST=1, y es muy probable que su script funcione con este cambio.Respuestas:
En el caso en que el usuario ingresó "y", puede salir de while y case:
En su caso, usted quiere hacer
break 2.fuente
break 2, con respecto a su comentario anterior, sí, intenté establecer una variable, pero no funcionó. Supongo que bash tiene un alcance local dentro de while y bloques de casos. a diferencia de, por ejemplo, PHPcasecomo lo hizo debe reflejarse en la prueba para el bucle while.[Yy]bloque de casos. hice una pequeña edición dentro de mi pregunta para reflexionar, pero tienes razón, funciona. ¡Gracias, aprendí un par de cosas geniales!breakes suficiente. No veo dos niveles de bucles en el código.@dhag tiene una gran respuesta. También puedes usar:
fuente