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

如何编写可调用其他脚本的Bash主菜单脚本?

解决Bash主菜单调用外部脚本的问题

嘿,你已经把主菜单的架子搭得有模有样了!要在case分支里调用其他脚本其实超简单,下面给你详细说几种实现方法,还有优化后的完整代码示例。

调用外部脚本的几种方式

你可以根据自己的需求选下面任意一种:

  • 直接运行脚本:如果脚本在当前目录,用./脚本名.sh;如果脚本在系统PATH目录里(比如/usr/local/bin),直接写脚本名.sh就行;要是脚本在其他路径,就写完整绝对路径/home/user/scripts/脚本名.sh。记得给脚本加执行权限:chmod +x 脚本名.sh。
  • 用Bash解释器调用:如果脚本没加执行权限或者开头没写#!/bin/bash,可以用bash /路径/脚本名.sh来运行,这样不用改权限也能执行。
  • Source脚本:用source /路径/脚本名.sh或者. /路径/脚本名.sh,这种方式会在当前shell环境里执行脚本,适合需要和主菜单共享变量的场景,但要注意如果被调用的脚本里有exit命令,会直接退出主菜单哦。

优化后的完整菜单脚本

假设你的部门脚本分别是sistemas.sh、correctivo.sh、producto.sh、empresa.sh、cliente.sh,都放在主菜单脚本的同一目录下,修改后的代码如下:

#!/bin/bash

# 定义主菜单函数,方便重复调用
show_menu() {
    clear
    echo "¡Bienvenido -----!"
    sleep 1
    echo "¿A que departamento perteneces?"
    echo "1. Sistemas"
    echo "2. Correctivo"
    echo "3. Producto"
    echo "4. Empresa"
    echo "5. Cliente"
    echo "6. Salir"  # 加个退出选项更友好
    read -p "请输入选项编号: " depart
}

# 循环显示菜单,直到用户选择退出
while true; do
    show_menu
    case "$depart" in
        1) 
            echo "Seleccionaste sistemas"
            # 调用sistemas脚本,先检查是否存在且可执行
            if [ -x ./sistemas.sh ]; then
                ./sistemas.sh
            else
                echo "错误:sistemas.sh不存在或无执行权限!"
            fi
            read -p "按任意键返回主菜单..."  # 让用户看完结果再返回
            ;;
        2) 
            echo "Seleccionaste correctivo"
            if [ -x ./correctivo.sh ]; then
                ./correctivo.sh
            else
                echo "错误:correctivo.sh不存在或无执行权限!"
            fi
            read -p "按任意键返回主菜单..."
            ;;
        3) 
            echo "Seleccionaste producto"
            if [ -x ./producto.sh ]; then
                ./producto.sh
            else
                echo "错误:producto.sh不存在或无执行权限!"
            fi
            read -p "按任意键返回主菜单..."
            ;;
        4) 
            echo "Seleccionaste empresa"
            if [ -x ./empresa.sh ]; then
                ./empresa.sh
            else
                echo "错误:empresa.sh不存在或无执行权限!"
            fi
            read -p "按任意键返回主菜单..."
            ;;
        5) 
            echo "Seleccionaste cliente"
            if [ -x ./cliente.sh ]; then
                ./cliente.sh
            else
                echo "错误:cliente.sh不存在或无执行权限!"
            fi
            read -p "按任意键返回主菜单..."
            ;;
        6)
            echo "¡Adiós!"
            exit 0
            ;;
        *)
            echo "选项无效,请输入1-6之间的数字!"
            read -p "按任意键返回主菜单..."
            ;;
    esac
done

额外提示

  • 如果你的部门脚本不在当前目录,记得把./脚本名.sh改成实际的路径,比如/opt/scripts/sistemas.sh。
  • 要是不需要检查脚本是否存在,直接写调用语句就行,但加个判断能避免报错时用户一脸懵。
  • 循环菜单的设计能让用户不用每次都重新运行主脚本,体验更好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:31:03