2017-06-02 12 views
0

Als Anfänger bin ich nicht sicher, ob dies der beste Weg ist, mehrere Schleifen zu machen !! obwohl es gut funktioniert, kann man mich vorschlagen, wenn es eine elegante Art und Weise ist, dies zu tun (ich bin bash nicht eingeschränkt, aber ich bin nicht vertraut mit anderen Sprachen)Bash: zwei Schleifen innerhalb der While-Schleife

#!/bin/bash 
while :; do 
      read -n1 -e -p"Top Levels 1-5: " top_levels 
      if [ "$top_levels" == "1" ]; then 
       echo "top level 1" 
      elif [ "$top_levels" == "2" ]; then 
       while :; do 
          read -n1 -e -p"Sub Levels 1-5: " sub_levels 
          if [ "$sub_levels" == "1" ]; then 
           echo "sub level 1" 
          elif [ "$sub_levels" == "2" ]; then 
           echo "sub level 2" 
          elif [ "$sub_levels" == "3" ]; then 
           while :; do 
              read -n1 -e -p"Final Levels 1-5: " final_levels 
              if [ "$final_levels" == "1" ]; then 
               echo "Final level 1" 
              elif [ "$final_levels" == "2" ]; then 
               echo "Final level 2" 
              elif [ "$final_levels" == "3" ]; then 
               echo "Final level 3" 
              elif [ "$final_levels" == "4" ]; then 
               echo "Final level 4" 
              else 
               echo "bye" 
               break 
              fi 
             done 
          elif [ "$sub_levels" == "4" ]; then 
           echo "sub level 4" 
          else 
           echo "bye" 
           break 
          fi 
         done 
      elif [ "$top_levels" == "3" ]; then 
       echo "top level 3" 
      elif [ "$top_levels" == "4" ]; then 
       echo "top level 4" 
      else 
       echo "bye" 
       exit 
      fi 
     done 
+0

Elegantere Art, was zu tun? Unabhängig von der Antwort gehören zu codereview.stackexchange.com Fragen, die nach Verbesserungen des Arbeitscodes fragen. – chepner

+1

Ihre Frage ist wirklich unklar. Wenn eine Aufgabe zwei Schleifen innerhalb einer anderen Schleife benötigt - nun, es gibt keinen eleganteren Weg, als zwei Schleifen in eine andere zu legen. Sie sollten die gewünschte Aufgabe beschreiben: Es reicht nicht aus, den Code zu zeigen, ohne zu erklären, was Sie tun möchten. – linuxfan

+0

Mann, Sie brauchen Kommentare. Es würde den Leuten helfen, zu verstehen, was Sie tun und warum. – SaintHax

Antwort

0

ich es so

schreiben würde
#!/bin/bash 

process_final_levels() { 
    while :; do 
     read -n1 -e -p"### Final Levels 1-5: " final_levels 
     case $final_levels in 
      1) echo "Final level 1";; 
      2) echo "Final level 2";; 
      3) echo "Final level 3";; 
      4) echo "Final level 4";; 
      *) echo "returning to sub levels" 
      break;; 
     esac 
    done 
} 


process_sub_levels() { 
    while :; do 
     read -n1 -e -p"# Sub Levels 1-5: " sub_levels 

     case "$sub_levels" in 
      1) echo "sub level 1" ;; 
      2) echo "sub level 2" ;; 
      3) process_final_levels;; 
      4) echo "sub level 4" ;; 
      *) echo "returning to top levels" 
      break;; 
     esac 
    done 
} 


while :; do 
    # get top levels to work with 
    read -n1 -e -p"Top Levels 1-5: " top_levels 

    case "$top_levels" in 
     1) echo "top level 1" ;; 
     2) process_sub_levels ;; 
     3) echo "top level 3" ;; 
     4) echo "top level 4" ;; 
     *) echo "Bye" 
     exit;; 
    esac 
done 

Ich änderte die Eingabeaufforderung und das Beenden von Zeichenfolgen, um intuitiver zu sein, auf welcher Ebene Sie arbeiten. Ich habe keine Kommentare hinzugefügt, b/c Ich habe keine Ahnung, wofür das ist. Ich funktionalisierte, b/c jeder Code, der modifiziert, getestet oder gewartet werden sollte, sollte funktionalisiert werden.

Verwandte Themen