Bash案例菜单 - 动态选择

时间:2009-11-11 03:58:03

标签: bash menu case

我不确定在提出后续问题的政策是什么。如果我违反协议,请原谅。之前我正在用bash(Here

构建一个菜单

到目前为止,我的工作非常好。代码在这里。

while [[ 1 ]]
do
    cat -n "$dumpfile"
    read -p "Please make a selection, select q to quit: " choice
    case $choice in
            # Check for digits
    [0-9] )   dtvariable=$(sed -n "$choice"p "$dumpfile")
              $dtvariable            ;;
     q|Q)
         break
           ;;
      *)
           echo "Invalid choice"
           ;;
    esac
done

除了 - 适用于最多9个菜单项。菜单将是动态的 - 可以包含1个项目,20个项目或197个项目。我已经尝试将[0-9]更改为[0-9] [0-9]以查看它是否需要12.但它没有。任何人都可以把我放在正确的道路上吗?我想我可以删除[0-9]部分并取出任何不是q的东西。但寻找数字不是更好吗?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

我会对$choice进行一些验证:

case $choice in
     # Check for digits
    +([0-9]))
        lines=($(wc -l ))
        if (( choice > 0 && choice <= lines ))
        then
            dtvariable=$(sed -n "$choice"p "$dumpfile")
            $dtvariable            ;;
        fi
# etc.

答案 1 :(得分:1)

这就是我的工作。主要区别是添加了shopt -s extglob,它启用了扩展模式匹配,以及+([0-9])模式, 是正则表达式[0-9]+

的bash等价物
shopt -s extglob
while [[ 1 ]]
do
    read -p "Please make a selection, select q to quit: " choice
    case $choice in
            # Check for digits
    +([0-9]))  
         echo $choice ;;
     q|Q)
         break
           ;;
      *)
           echo "Invalid choice"
           ;;
    esac
done