2016-05-11 4 views
2

Es ist meine erste Frage, so hoffe ich, dass ich klar genug bin Ich habe das folgende Problem mit einem Fall in einem Fall. Der erste ist ein Menü, das eine Funktion auslöst. In der Funktion gibt es einen anderen Fall. Falls der Benutzer NEIN wählt, sollte er zum ersten Fall zurückkehren. habe ich nicht gefunden, wie zu tun, dass das erste Skript neben der Einleitung (den ersten Fall enthält:BASH: zum oberen verschachtelten 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 


} 

so wie Sie sehen können, wenn Die Funktion wird gestartet, es wird der zweite Fall gestartet, in dem der Benutzer gefragt wird, ob er fortfahren möchte.Wenn er Nein wählt, kann er das Menü wieder aufrufen.Aber mit der Art und Weise, wie ich es tue, spawne ich ein Menü.sh in dem Fall. Was ist die bessere Lösung? Vielen Dank im Voraus für Ihre Hilfe

+0

Verwenden Sie eine Funktion oder eine Schleife, anstatt das Skript erneut aufzurufen. Oder lassen Sie einfach das zweite Skript enden und Sie kehren zum ersten zurück. Sie müssen es nicht noch einmal aufrufen. Intead von './Menu.sh', einfach' exit'. – 123

+0

FYI: Sie vermissen eine ';;' vor '4)' – Jahid

Antwort

2

Wie Ihr Code ausgelegt ist, müssen Sie nichts ausführen, um zum Menü zurückzukehren. Löschen Sie einfach die Zeilen, in denen Sie das menu.sh erzeugen.

Ein Beispiel function1 würde wie folgt aussehen:

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

while read answer;do 

Um

while read -p "Enter a number: " answer;do 

Es wird leichter verständlich machen ändern, wie die Dinge funktionieren.

+0

Vielen Dank für Ihre Antwort. War ein kleines Problem von Loggic von meiner Seite –

Verwandte Themen