Es ist meine erste Frage, also hoffe ich, dass ich klar bingenug Ich habe das folgende Problem mit einem Fall in einem Fall. Der erste ist ein Menü, das eine Funktion auslöst. Innerhalb der Funktion gibt es noch einen anderen Fall. Falls der Benutzer NEIN wählt, sollte er zum ersten Fall zurückkehren. Ich habe nicht gefunden, wie ich das neben dem Start des ersten Skripts (mit dem ersten Fall:
menu.sh
:
source ./functions.sh
#read answer
while read answer;do
case $answer in
1)
function1
;;
2)
function2
;;
3)
# the same, without function
read -p "do you want to continue [y/n] ?" choice
case $choice in
y|Y)
# DO SOME STUFF
menu.sh
;;
n|N )
./menu.sh
;;
*)
echo "invalid input"
./menu.sh
;;
esac
4)
function4
;;
5)
quit
;;
esac
done
functions.sh
:
function1() {
read -p "do you want to continue [y/n] ?" choice
case $choice in
y|Y)
# DO SOME STUFF and go back to menu
echo "hello"
menu.sh
;;
n|N )
./menu.sh
;;
*)
echo "invalid input"
./menu.sh
;;
esac
}
wie Sie sehen können, wenn die Funktion gestartet wird,Der zweite Fall wurde gestartet, in dem der Benutzer gefragt wird, ob er fortfahren möchte. Wenn er Nein wählt, kann er das Menü wieder aufrufen. Aber so wie ich das mache, spawning ich ein menu.sh im Case. Was ist die bessere Lösung? Vielen Dank im Voraus für Ihre Hilfe
Antworten:
2 für die Antwort № 1Wenn Ihr Code so angelegt ist, müssen Sie nichts ausführen, um zum Menü zurückzukehren. Löschen Sie einfach die Zeilen, in denen Sie den Code erzeugen menu.sh.
Ein Beispiel function1
würde aussehen wie:
function1() {
read -p "do you want to continue [y/n] ?" choice
case $choice in
y|Y)
# DO SOME STUFF and go back to menu
echo "hello"
;;
n|N )
;;
*)
echo "invalid input"
;;
esac
}
Und ändern
while read answer;do
Zu
while read -p "Enter a number: " answer;do
Dadurch wird es einfacher zu verstehen, wie die Dinge funktionieren.