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

如何实现Bash菜单脚本自动适配新增Shell脚本

自动生成Bash菜单调用逻辑的优化方案

以下是优化后的脚本,无需手动新增case分支,会自动扫描当前目录下的可执行Shell脚本并生成菜单选项,同时保留退出和无效输入处理:

#!/bin/bash

# 获取当前脚本文件名,避免将自身加入菜单选项
SELF_SCRIPT=$(basename "$0")

# 扫描当前目录下所有可执行的.sh脚本,排除自身
SCRIPTS=()
for script in *.sh; do
    if [[ "$script" != "$SELF_SCRIPT" && -f "$script" && -x "$script" ]]; then
        SCRIPTS+=("$script")
    fi
done

# 构建菜单选项:所有扫描到的脚本 + 退出选项
OPTIONS=("${SCRIPTS[@]}" "退出菜单")

# 生成交互式选择菜单
echo "=== 脚本执行菜单 ==="
select opt in "${OPTIONS[@]}"; do
    case "$opt" in
        "退出菜单")
            echo "已退出菜单"
            break
            ;;
        *)
            # 判断选中的是否为有效脚本
            if [[ -n "$opt" ]]; then
                echo "开始执行脚本: $opt"
                # 此处根据你的需求调整执行逻辑:
                # 如果需要source脚本并调用myfunc函数,保留下面两行
                source "$(pwd)/$opt"
                myfunc
                # 如果无需source,直接执行脚本,替换为:./$opt
            else
                echo "错误:无效选项,请重新选择"
            fi
            ;;
    esac
done

关键逻辑说明

  • 自动扫描脚本:通过循环遍历当前目录的.sh文件,筛选出可执行且非当前菜单脚本的文件,自动加入选项列表
  • 动态生成菜单:select语句会自动为每个选项分配编号,完全替代手动硬编码数字分支的工作
  • 兼容原有执行逻辑:保留了source调用脚本并执行myfunc的逻辑,若你的脚本是独立可执行的,只需替换为直接执行./$opt即可
  • 错误处理:选中无效编号时,会提示错误并重新显示菜单;退出选项单独处理,确保正常退出循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:10:41