/ / BASH: Zum oberen Schuppenfall - Bash, Menü, Fall

BASH: Zum oberen Schuppenfall - Bash, Menü, Fall

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 № 1

Wenn 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.