bash脚本中的多选菜单

我是一个bash新手,但我想创建一个脚本,我希望允许用户从选项列表中选择多个选项.

基本上我想要的是类似于下面的例子:

#!/bin/bash
       OPTIONS="Hello Quit"
       select opt in $OPTIONS; do
           if [ "$opt" = "Quit" ]; then
            echo done
            exit
           elif [ "$opt" = "Hello" ]; then
            echo Hello World
           else
            clear
            echo bad option
           fi
       done

(来自http://www.faqs.org/docs/Linux-HOWTO/Bash-Prog-Intro-HOWTO.html#ss9.1)

但是我的脚本会有更多选项,我想允许选择倍数.所以这样的事情:

1)选项1
2)选项2
3)选项3
4)选项4
5)完成

对他们选择的那些反馈意见也很好,例如,他们已经选择的标志旁边加上标志.例如,如果您选择“1”,我想要翻页以清除并重新打印:

1) Option 1 +
2) Option 2
3) Option 3
4) Option 4
5) Done

然后,如果您选择“3”:

1) Option 1 +
2) Option 2
3) Option 3 +
4) Option 4
5) Done

此外,如果他们再次选择(1)我希望它“取消选择”选项:

1) Option 1
2) Option 2
3) Option 3 +
4) Option 4
5) Done

最后当按下Done时,我想要在程序退出之前选择要显示的列表,如果当前状态是:

1) Option 1
2) Option 2 +
3) Option 3 + 
4) Option 4 +
5) Done

按5应打印:

Option 2,Option 3,Option 4

…脚本终止.

所以我的问题 – 这是否可能在bash中,如果有的话,是否有人能够提供代码示例?

任何建议将不胜感激.

我想你应该看看 dialogwhiptail.

编辑:

这是一个使用您问题中的选项的示例脚本:

#!/bin/bash
cmd=(dialog --separate-output --checklist "Select options:" 22 76 16)
options=(1 "Option 1" off    # any option can be set to default to "on"
         2 "Option 2" off
         3 "Option 3" off
         4 "Option 4" off)
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
clear
for choice in $choices
do
    case $choice in
        1)
            echo "First Option"
            ;;
        2)
            echo "Second Option"
            ;;
        3)
            echo "Third Option"
            ;;
        4)
            echo "Fourth Option"
            ;;
    esac
done

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...