如何实现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
相关产品推荐
相关产品推荐

