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

Shell脚本模块编号分配问题:实现映射、case调用及指定格式打印

Bash模块编号分配解决方案

修正后的完整脚本实现

# 存储模块列表的全局数组
declare -a module_list

# 加载模块到数组的函数
load_modules() {
    # 清空数组
    module_list=()
    # 遍历modules目录下的文件/目录,存入数组(避免ls的空格问题,用glob更安全)
    for mod in ./modules/*; do
        # 只取文件名,去掉路径
        mod_name=$(basename "$mod")
        module_list+=("$mod_name")
    done
}

# 单独的模块列表打印函数
print_modules() {
    local count=0
    local total=${#module_list[@]}
    while [ $count -lt $total ]; do
        # 处理第一列
        local idx1=$((count + 1))
        echo -n "[${idx1}] ${module_list[$count]}"
        count=$((count + 1))
        # 如果还有下一个,处理第二列
        if [ $count -lt $total ]; then
            local idx2=$((count + 1))
            echo -n " [${idx2}] ${module_list[$count]}"
            count=$((count + 1))
        fi
        # 换行
        echo
    done
}

# 生成对应编号的模块调用逻辑(模拟case分支的实际执行)
run_module() {
    local choice=$1
    local idx=$((choice - 1))
    if [ $idx -ge 0 ] && [ $idx -lt ${#module_list[@]} ]; then
        # 这里替换为实际模块的执行逻辑,比如调用对应函数或执行脚本
        echo "Executing ${module_list[$idx]}..."
        # 示例:若模块是可执行脚本,可写为 ./modules/${module_list[$idx]}
    else
        echo "Invalid choice: $choice"
    fi
}

# 主逻辑示例
main() {
    load_modules
    echo "Available modules:"
    print_modules
    
    # 模拟用户输入选择
    read -p "Enter your choice: " choice
    
    # 对应要求的case结构(静态分支更安全,数量多可按需扩展)
    case $choice in
        1) run_module 1 ;;
        2) run_module 2 ;;
        3) run_module 3 ;;
        4) run_module 4 ;;
        *) echo "Invalid choice" ;;
    esac
}

# 执行主逻辑
main

关键修正与说明

  • 模块存储优化:用declare -a声明数组存储模块列表,改用glob遍历目录替代ls,避免空格文件名解析错误。
  • 独立打印逻辑:print_modules函数单独负责按双列格式输出编号与模块名,完全符合“模块名称不在循环内输出”的要求。
  • 算术运算修正:bash中算术运算需用$((...))语法,替换原脚本x=$(x+1)的错误写法,确保编号递增正常。
  • case分支匹配:通过run_module统一处理模块执行,case分支只需传递编号即可,后续模块增减时只需扩展case分支和数组内容,维护更方便。

原脚本错误修复点

  1. 原循环for module in modules; do改为遍历数组或./modules/*,否则仅会循环字符串"modules"而非实际模块。
  2. 原编号递增语句x=$(x+1)改为x=$((x+1)),符合bash算术运算规则。
  3. 将输出逻辑完全剥离到单独函数,满足格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:00:16