Wickeln Sie den Teil, den Sie in einer Schleife wiederholt werden soll, und überlegen Sie, wie Sie beenden aus der Schleife. Hier wird der Befehl break
den Kreis verlassen, wenn Sie eingeben. Andernfalls, nachdem die if
-Anweisung abgeschlossen ist, kehren Sie zum Anfang der Schleife für eine weitere Runde zurück.
while true; do
read -p " Please enter [x ; y ; z; q]: " COMMAND
if [ "$COMMAND" = x ] ; then
echo " This is command X. "
elif [ "$COMMAND" = y ]; then
echo " This is command y. "
elif [ "$COMMAND" = z ]; then
echo " This is command z"
elif [ "$COMMAND" = q ]; then
break
else
echo " Command not found! "
fi
done
Sie können diese reinigen durch die Verwendung einer case
Anweisung statt großer if
Aussage auf. Sie können für jede Auswahl mehrere Befehle ausführen. Die ;;
signalisiert das Ende jedes einzelnen Blocks.
while true; do
read -p " Please enter [x ; y ; z; q]: " COMMAND
case $COMMAND in
x) echo "This is command X."
;;
y) echo "This is command Y."
;;
z) echo "This is command Z."
;;
q) break ;;
esac
done
Sie können auch einen speziellen Test anstelle des true
Befehls, so dass die Schleife selbst den Wert des Befehls überprüfen und beenden, anstatt für einen expliziten break
Befehl wartet.
while [ "$COMMAND" -ne q ]; do
read -p " Please enter [x ; y ; z; q]: " COMMAND
case $COMMAND in
x) echo "This is command X."
;;
y) echo "This is command Y."
;;
z) echo "This is command Z."
;;
esac
done
Vielen Dank! Ihr Kommentar hat mir geholfen. Ich mag eher die erste Option mit if. –