2017-06-02 66 views
0

作为初学者,我不确定这是否是执行多个循环的最佳方式!虽然它工作得很好,请给我建议,如果有这样的一种优雅的方式(我不受限的抨击,但我不熟悉其他语言)Bash:while循环中的两个循环

#!/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

更优雅的做法是什么?无论答案如何,要求改进工作代码的问题可能都属于codereview.stackexchange.com。 – chepner

+1

你的问题真的不清楚。如果一个任务在另一个循环内部需要两个循环 - 那么与将两个循环放入另一个循环内部相比,没有更好的方法。你应该描述所需的任务:显示代码而不解释你想做什么是不够理解的。 – linuxfan

+0

男人,你需要评论。它会帮助人们了解你在做什么,为什么。 – SaintHax

回答

0

我会写这样

#!/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 

我改变了提示符并退出字符串,以便更直观地了解您的工作级别。我没有添加评论,B/C我不知道这是什么。我功能化了,任何需要修改,测试或维护的代码都应该功能化。