简单的菜单驱动 BASH 脚本

Simple Menu-Driven BASH Script

好的,我有了这个简单的菜单驱动 BASH 脚本。我还在学习 BASH,所以目前 "KISS" 是我的方法。下面的代码 有效 ,太棒了...看看,我会在另一边解释我的问题...

echo -en "\nWhat type of server is this? [DIGIT ONLY]\n\n1. cPanel\n2. Plesk\n3. Ubuntu\n4. No Panel / Simple Control Panel\n\nEnter Selection: "
read type
while true; do
case $type in
    "1")
        echo -en "Here is the stuff we can do for a cPanel server\n\n1. do this\n2. do that\n\nEnter Selection: ";
        read cpopt
            case $cpopt in
                "1")
                    echo "sub1"
                    break
                ;;
                "2")
                    echo "sub2"
                    break
                ;;
                *)
                    echo "You did not choose an option, lets go back!"
                    break
                ;;
            esac;;
    "2")
        echo "Plesk Stuff";
        break
    ;;
    "3")
        echo "Ubuntu Stuff";
        break
    ;;
    "4")
        echo "No Panel / Simple Control Panel";
        break
    ;;
    *)
        echo "Invalid Input";
        break
    ;;
esac
done

如您所见,每个 CASE 语句都有效(这很好),但这是我正在尝试做的...我想创建一个简单的导航系统...允许用户 5-级别深返回一个级别(或完全退出)。如您所见,我正在使用 BREAK,但这会退出整个脚本,所以我想我会使用嵌套的 WHILE,认为 BREAK 只会跳出它所在的循环(嵌套的循环)...不高兴,这也杀死了整个剧本。

因为我在学习,所以我不是在这里寻找明确的答案(虽然这些很好)......我真的在寻找“你应该阅读 XYZ,它会做到这一点).. .然后我会深入探讨。

非常感谢提供的任何帮助,谢谢!

你有嵌套的案例但没有循环它们所以它只会在第二个案例语句之后继续第一个案例语句

像这样的东西应该可以工作

#/bin/bash

while true;do
        echo "Input type"
        read type

        case $type in

        "1")
                while true;do
                        echo -en "Here is the stuff we can do for a cPanel server\n\n1. do this\n2. do that\n\nEnter Selection: ";
                        read cpopt
                        case $cpopt in
                        "1")
                                echo "sub1"
                                break
                                ;;
                        "2")
                                echo "sub2"
                                break
                                ;;
                        *)
                                echo "You did not choose an option, lets go back!"
                                ;;
                        esac
                done
                ;;

        "2")
                echo "Plesk Stuff";
                break
                ;;
        "3")
                echo "Ubuntu Stuff";
                break
                ;;
        "4")
                echo "No Panel / Simple Control Panel";
                break
                ;;
        *)
                echo "Invalid Input";
                ;;
        esac
done

您需要为每个子菜单创建一个新的循环,并从您想要循环的选项和错误选择的选项中省略 breaks

此外,如果您想向上移动多个级别的循环(或菜单),那么您可以在 break

之后添加一个数字

break 2

这将通过两级循环返回


有关循环控制的进一步阅读,您可以查看此处
http://tldp.org/LDP/abs/html/loopcontrol.html

这是新的、完美导航的代码:

#!/bin/bash
while true; do
    echo -en "\nWhat type of server is this? [DIGIT ONLY]\n\n1. cPanel\n2. Plesk\n3. Ubuntu\n4. No Panel / Simple Control Panel\n5.) Exit\n\nEnter Selection: "
    read type
    case $type in
            "1")
                    while true; do
                            echo -en "Here is the stuff we can do for a cPanel server\n\n1. do this\n2. do that\n3. Go Back\n4. Exit\n\nEnter Selection: ";
                            read cpopt
                                    case $cpopt in
                                            "1")
                                                    echo "Did This!"
                                                    sleep 1
                                                    clear
                                                    continue
                                                    ;;
                                            "2")
                                                    echo "Did That!"
                                                    sleep 1
                                                    clear
                                                    continue
                                            ;;
                                            "3" )
                                                    echo "Going Back!"
                                                    sleep 1
                                                    clear
                                                    break
                                            ;;
                                            "4" )
                                                    echo "Exiting..."
                                                    sleep 1
                                                    break 2
                                            ;;
                                            *)
                                                    echo "Invalid Input";
                                                    sleep 1
                                                    clear
                                                    continue
                                            ;;
                                    esac
                    done
                    ;;
            "2")
                    echo "Plesk Stuff";
                    sleep 1
                    clear
                    continue
            ;;
            "3")
                    echo "Ubuntu Stuff";
                    sleep 1
                    clear
                    continue
            ;;
            "4")
                    echo "No Panel / Simple Control Panel";
                    sleep 1
                    clear
                    continue
            ;;
            "5")
                    echo "Exiting..."
                    sleep 1
                    break
            ;;
            *)
                    echo "Invalid Input";
                    sleep 1
                    clear
                    continue
            ;;
    esac
done

谢谢,非常感谢您的帮助!