You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本菜单选项添加描述后输入无响应问题求助

Bash脚本菜单添加描述后功能失效的解决方法

你的问题根源在于:修改options数组添加描述后,case语句里的匹配字符串还是原来的短选项名称(比如"Option 1"),但select语句中opt变量现在是带描述的完整字符串(比如"Option 1 - Search with no date filter. SLOW!!"),导致case无法匹配到对应分支,所以输入编号后没有执行预期逻辑。

下面提供两种可行的解决方法:

方案一:修改case匹配项为完整描述字符串

直接把case里的每个匹配字符串改成options数组中对应的完整内容,就能匹配成功:

#!/bin/bash
echo ""
PS3='Please enter your choice: '
echo ""
options=("Option 1 - Search with no date filter. SLOW!!" "Option 2 - Search via year" "Option 3 - Full date search" "Quit")
echo ""
select opt in "${options[@]}"
do
    case $opt in
        "Option 1 - Search with no date filter. SLOW!!")
            echo "" 
            echo Please enter the telephone number?
            echo ""
            read vartel
            echo ""
            grep -e $vartel /root/hourly/cdr_export-hourly-*.csv
            echo ""
            ;;
        "Option 2 - Search via year")
            echo "" 
            echo Please enter the telephone number?
            echo ""
            read vartel
            echo ""
            echo Please enter the last two year digits?
            echo ""
            read varyear
            echo ""
            grep -e $vartel /root/hourly/cdr_export-hourly-$varyear*.csv
            echo ""
            ;;
        "Option 3 - Full date search")
            echo "" 
            echo Please enter the telephone number?
            echo ""
            read vartel
            echo ""
            echo Please enter the last two year digits?
            echo ""
            read varyear
            echo ""
            echo Please enter the month?
            echo ""
            read varmonth
            echo ""
            echo Please enter the day?
            echo ""
            read varday
            echo ""
            grep -e $vartel /root/hourly/cdr_export-hourly-$varyear-$varmonth-$varday*.csv
            echo ""
            ;;
        "Quit")
            break
            ;;
        *) echo "invalid option $REPLY";;;
    esac
done

方案二:基于REPLY变量匹配(更推荐)

select会把用户输入的菜单编号存储在REPLY变量中,直接根据编号匹配分支,这样后续修改options里的描述文本时,无需改动case逻辑,维护更方便:

#!/bin/bash
echo ""
PS3='Please enter your choice: '
echo ""
options=("Option 1 - Search with no date filter. SLOW!!" "Option 2 - Search via year" "Option 3 - Full date search" "Quit")
echo ""
select opt in "${options[@]}"
do
    case $REPLY in
        1)
            echo "" 
            echo Please enter the telephone number?
            echo ""
            read vartel
            echo ""
            grep -e $vartel /root/hourly/cdr_export-hourly-*.csv
            echo ""
            ;;
        2)
            echo "" 
            echo Please enter the telephone number?
            echo ""
            read vartel
            echo ""
            echo Please enter the last two year digits?
            echo ""
            read varyear
            echo ""
            grep -e $vartel /root/hourly/cdr_export-hourly-$varyear*.csv
            echo ""
            ;;
        3)
            echo "" 
            echo Please enter the telephone number?
            echo ""
            read vartel
            echo ""
            echo Please enter the last two year digits?
            echo ""
            read varyear
            echo ""
            echo Please enter the month?
            echo ""
            read varmonth
            echo ""
            echo Please enter the day?
            echo ""
            read varday
            echo ""
            grep -e $vartel /root/hourly/cdr_export-hourly-$varyear-$varmonth-$varday*.csv
            echo ""
            ;;
        4)
            break
            ;;
        *) echo "invalid option $REPLY";;;
    esac
done

内容的提问来源于stack exchange,提问作者gareth0402

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:01:27