Im folgenden Skript - das den Benutzer auffordert, zu bestätigen, dass er mit der Ausführung eines möglicherweise fehlerhaften Skripts fortfahren möchte Y
- wird der case
Block verlassen, wenn der Benutzer die Eingabeaufforderung eingibt , und er wird wieder in die while
Schleife zurückgeschickt.
#! /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?"
Bei der n
Eingabe ist das Skript vollständig wie gewünscht vorhanden. Ich möchte wissen, wie man es so macht, dass Y
das Skript bei der Eingabe sowohl aus dem Block case
als auch aus dem while-Block ausbricht , aber nicht vollständig beendet wird. Gibt es etwas, das ich für den Platzhalter ("Was geht hier?") Einfügen kann, um das zu tun?
bash
shell-script
the_velour_fog
quelle
quelle
[Yn]*)
; du meintest wahrscheinlich[Yy]*)
.$TEST=1
sein sollteTEST=1
, und es ist sehr wahrscheinlich, dass Ihr Skript mit dieser Änderung funktioniert.Antworten:
In dem Fall, in dem der Benutzer "y" eingegeben hat, können Sie sowohl while als auch case beenden:
In Ihrem Fall möchten Sie tun
break 2
.quelle
break 2
habe es getan, in Bezug auf Ihren Kommentar oben, ja, ich habe versucht, eine Variable zu setzen, aber es hat nicht funktioniert. anders als zum Beispiel PHPcase
von Ihnen festgelegten Zeit sollte sich im Test für die while-Schleife widerspiegeln.[Yy]
Fallblocks ausgeführt. habe in meiner Frage eine kleine Bearbeitung vorgenommen, um darüber nachzudenken, aber dein Recht, es funktioniert - danke, ich habe ein paar coole Dinge gelernt!break
ist genug. Ich sehe keine zwei Ebenen von Schleifen im Code.@dhag hat eine tolle Antwort. Sie können auch verwenden:
quelle