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 Y
en el indicador, saldrá del case
bloque, solo para ser enviado nuevamente al while
bucle.
#! /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 n
se ingresa, el script existe completamente como se desea. Me gustaría saber cómo hacer para que cuando Y
se 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=1
deberí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, PHPcase
como 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!break
es suficiente. No veo dos niveles de bucles en el código.@dhag tiene una gran respuesta. También puedes usar:
fuente