简单的菜单驱动 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
谢谢,非常感谢您的帮助!
好的,我有了这个简单的菜单驱动 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
谢谢,非常感谢您的帮助!