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

如何在Bash脚本中实现类似Makefile的目标执行功能?

在Bash脚本中实现类似Makefile的目标执行模式

完全可以用Bash脚本实现这种按需执行指定目标的功能,无需拆分多个短脚本。下面是两种实用实现方案:

基础版(单目标执行)

#!/bin/bash

# 封装Clean目标的执行逻辑
clean() {
    rm -f *.txt
    echo "Clean完成:已删除所有.txt文件"
}

# 封装Tar目标的执行逻辑
tar() {
    tar -czf archive.tar.gz *.txt
    echo "Tar完成:已生成压缩包archive.tar.gz"
}

# 根据传入的第一个参数匹配对应目标
case "$1" in
    Clean|clean)
        clean
        ;;
    Tar|tar)
        tar
        ;;
    *)
        echo "可用目标:Clean、Tar"
        echo "使用方式:$0 [目标名]"
        exit 1
        ;;
esac

使用方式

  • 执行Clean目标:./myscript Clean(支持小写clean)
  • 执行Tar目标:./myscript Tar(支持小写tar)
  • 未指定目标时自动输出帮助信息

进阶版(多目标批量执行)

如果需要一次执行多个目标,可扩展为循环处理所有传入参数:

#!/bin/bash

clean() {
    rm -f *.txt
    echo "Clean完成:已删除所有.txt文件"
}

tar() {
    # 先检查是否存在可打包的文件
    if ! ls *.txt 1> /dev/null 2>&1; then
        echo "错误:未找到.txt文件,无法执行Tar目标"
        exit 1
    fi
    tar -czf archive.tar.gz *.txt
    echo "Tar完成:已生成压缩包archive.tar.gz"
}

# 未传入任何目标时输出帮助
if [ $# -eq 0 ]; then
    echo "可用目标:Clean、Tar"
    echo "使用方式:$0 [目标名1] [目标名2]..."
    exit 1
fi

# 循环处理所有传入的目标参数
for target in "$@"; do
    case "$target" in
        Clean|clean)
            clean
            ;;
        Tar|tar)
            tar
            ;;
        *)
            echo "错误:未知目标 '$target'"
            echo "可用目标:Clean、Tar"
            exit 1
            ;;
    esac
done

使用方式

  • 依次执行Clean和Tar:./myscript Clean Tar
  • 重复执行同一目标:./myscript Clean Clean

核心逻辑说明

  1. 用函数封装每个目标的执行命令,便于后续维护和逻辑复用
  2. 用case语句匹配命令行参数,实现目标的精准路由
  3. 进阶版通过for循环遍历所有传入参数,支持多目标批量执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:02:39