【问题标题】:Program Not Entering Second Loop for the second time程序第二次未进入第二循环
【发布时间】:2019-06-03 15:30:35
【问题描述】:

我正在创建自己的 bash 脚本,但是当我退出第二个菜单时,代码不允许我再次进入第二个菜单。

我必须解释这个错误的唯一方法是,当我将 6 放回第一个而读取修复 6 时,是什么导致了问题的混淆? 但这没有意义,因为如果它修复了 6 会做 echo "

谁能告诉我为什么?

  while [ "$myscript" != "6" ]
   do
    echo "Script Menu"
    echo " 1 - Open"
    echo " 2 - Download"            
    echo " 3 - Update && Upgrade"   
    echo " 6 - Exit"

    echo "Choose  Your Script: "
    read myscript

    case $myscript in
            1)
                while [ "$open" != "6" ]
                    do
                        clear
                        echo "Open Menu"
                        echo " 1 - Rythombox"
                        echo " 2 - Anaconda"
                        echo " 3 - VSCode"
                        echo " 4 - Terminal"
                        echo " 6 - <-----Back"

                        echo "Choose Your Open: "
                        read open 

                        case $open in
                            1) 
                                echo "  Opening Rhythmbox"
                                gnome-terminal --tab -- "rhythmbox"
                            ;;
                            6) 
                                echo "<--- Back"
                            ;;

                            *)
                               echo "Not a option!"
                            ;;

                        esac
          done

【问题讨论】:

  • 添加一个shebang,然后将您的脚本粘贴到那里:shellcheck.net
  • 从不完整的代码片段中很难判断,但问题是$open与上次还是“6”?如果没有,请编辑您的脚本以创建问题的minimal, complete and verifiable example,这样人们就可以自己查看/尝试它,而不必费力地浏览您脚本中不相关的部分。

标签: bash shell sh


【解决方案1】:

正如 Gordon Davisson 注意到的那样,问题确实是 $open 与上次相比仍然是“6”
解决方案只是以合理的顺序读取和比较输入选择,而不是在读入变量之前测试[ "$open" != "6" ]

while   echo "Script Menu"
        echo " 1 - Open"
        echo " 2 - Download"            
        echo " 3 - Update && Upgrade"   
        echo " 6 - Exit"
        echo "Choose  Your Script: "
        read myscript
        [ "$myscript" != "6" ]
do
    case $myscript in
    1)  while   clear
                echo "Open Menu"
                echo " 1 - Rythombox"
                echo " 2 - Anaconda"
                echo " 3 - VSCode"
                echo " 4 - Terminal"
                echo " 6 - <-----Back"
                echo "Choose Your Open: "
                read open 
                [ "$open" != "6" ]
        do
            case $open in
            1)  echo "  Opening Rhythmbox"
                gnome-terminal --tab -- "rhythmbox"
                ;;
            6)  echo "<--- Back"
                ;;
            *)  echo "Not a option!"
                ;;
            esac
        done
    esac
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    相关资源
    最近更新 更多