Dans le script ci-dessous - qui invite l'utilisateur à confirmer qu'il souhaite continuer à exécuter un script potentiellement mauvais - lorsque l'utilisateur entre Y
à l'invite - il sortira du case
bloc, pour être ensuite renvoyé dans la while
boucle.
#! /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?"
Lorsque n
est entré, le script existe entièrement comme souhaité. Je voudrais savoir comment faire en sorte que lorsque Y
est entré, le script se détache à la fois du bloc case
et du bloc while, mais ne se ferme pas complètement. Y a-t-il quelque chose que je peux mettre pour l'espace réservé ("Qu'est-ce qui se passe ici ??") pour faire cela?
bash
shell-script
the_velour_fog
la source
la source
[Yn]*)
; vous vouliez probablement dire[Yy]*)
.$TEST=1
devrait êtreTEST=1
, et votre script est très susceptible de fonctionner avec ce changement.Réponses:
Dans le cas où l'utilisateur a entré "y", vous pouvez quitter à la fois while et case:
Dans votre cas, vous voulez faire
break 2
.la source
break 2
, concernant votre commentaire ci-dessus, oui, j'ai essayé de définir une variable, mais cela n'a pas fonctionné - je suppose que bash a une portée locale dans les blocs while et case? contrairement à, par exemple PHPcase
comme vous l'avez fait devrait être reflétée dans le test de la boucle while.[Yy]
bloc de cas. fait une petite retouche à l'intérieur de ma question pour réfléchir, mais votre droit ça marche - merci j'ai appris quelques trucs sympas!break
c'est suffisant. Je ne vois pas deux niveaux de boucles dans le code.@dhag a une excellente réponse. Vous pouvez aussi utiliser:
la source