bash:循环时内部两个循环



作为初学者,我不确定这是否是进行多个循环的最佳方法!尽管它运行良好,但请建议我如果有一种优雅的方法(我不仅限于bash,但我不熟悉其他语言(

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

我会像这样写

#!/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我不知道这是怎么回事。我功能化,b/c,任何需要修改,测试或维护的代码都应进行功能化。

最新更新