2014-11-04 66 views
-1

您好,我需要一些帮助我的编程脚本在bash脚本我的剧本有菜单和子菜单 这样菜单和子菜单,返回菜单脚本在Linux

1.do东西
2.do东西
3.do东西

当我选择1号,然后按回车 会出现子菜单

1.do东西
2.do东西
99.back到菜单

我怎么能做到这一点,我的大问题,当按99如何返回菜单

+0

你尝试过什么吗?您是否搜索过在shell脚本中执行此类操作的方法? – 2014-11-04 19:35:26

+0

是的,我尝试搜索,但我的问题回到菜单代码 – ASKER 2014-11-04 19:36:40

+0

[这个问题](http://stackoverflow.com/q/26635101/258523)(和我的回答)有帮助吗? – 2014-11-04 19:36:50

回答

0

试试这个示例脚本:我使用的菜单中选择循环(1和2) 。注意:在bash中选择循环将按照顺序将子弹编号分配给它的选项,所以如果你需要将子弹编号回显为99,那么这是你必须提出的事情(一个好的家庭作业)或者你可以创建最后一个menu_2变量中的值为“.. .. 99_back_to_menu_1”。

对于内部选择menu_2循环,我还使用直到循环(只有当用户选择back_to_menu_1选项时才退出内部选择循环),直到用户在menu_2中选择该特定选项为止,他将再次提示您输入menu_2选项再次。

如果您想要(行#s,18,19和31),您可以注释直到循环。如果用户选择“退出”退出,Menu_1将退出。

#!/bin/bash 

## Lets say you have all your inputs for your menu_1 in file menu1 and menu_2 in menu2 

## if input data is in a file, then do: menu1="$(cat menu_1)" and same for menu_2 with cat menu_2 file OR you can set menu_1 or menu_2 values (separated by spaces): menu_1="giga koba fifa"; menu_2="shenzi ed" 


## lets say you have. 
menu_1="Menu_1_a Menu_1_b Menu_1_c exit" 
menu_2="Menu_2_i Menu_2_ii Menu_2_iii Menu_2_iv back_to_menu1" 

select m1 in ${menu_1}; 
do 
    if [[ -n ${m1} ]]; then 
    echo -e "\n- Menu1: You selected: \"${m1}\"\n" 
    if [[ "$m1" == "exit" ]]; then break; fi ## break from outer select loop only if user selects "exit" to exit the outer select loop. 
    ##--------Inner/Second select loop------------- start 
    until [[ "$m2" == "back_to_menu1" ]]; 
    do 
    select m2 in ${menu_2}; 
    do 
     if [[ -n ${m2} ]]; then 
     echo -e "\n- Menu2: You selected: \"${m2}\" --- OK, do something here for this selection in menu2\n" 
     echo -e "\\n\n\t -- OK, I did something for $m2 option .... !! nice\n\n\n"; 
     if [[ "$m2" == "back_to_menu1" ]]; then break; fi ## break from outer select loop only if user selects "exit" to exit the outer select loop. 
     break; ## break from inner select loop as soon as user select any value. 
     else 
     echo -e "\n- Invalid selection \"${REPLY}\"...Please try again.\n\n"; 
     fi 
    done ## done inner select loop 
    done ## done for until loop 
    ##--------Inner/Second select loop------------- close 
    else 
    echo -e "\n- Invalid selection \"${REPLY}\"...Please try again.\n\n"; 
    fi 
done