linux打包固件shell脚本

发布于:2025-07-15 ⋅ 阅读:(14) ⋅ 点赞:(0)
  1. 不打包 pack.sh

  2. 解压后无父目录(直接是文件)

  3. 生成 checksum.txt(包含所有文件的 SHA256)

  4. 打包后 .tar.gz 移动到上级目录

#!/bin/bash

# 检查是否传入版本号参数
if [ -z "$1" ]; then
    echo "Usage: $0 <version> (e.g. v1.0.1)"
    exit 1
fi

VERSION="$1"
TAR_NAME="dtu_sdk_demo_${VERSION}.tar.gz"
CHECKSUM_FILE="checksum.txt"

# 1. 生成 checksum.txt(排除 pack.sh 和自身)
echo "Generating ${CHECKSUM_FILE}..."
find . -type f ! -name "${CHECKSUM_FILE}" ! -name "pack.sh" ! -name "${TAR_NAME}" -exec sha256sum {} + > "${CHECKSUM_FILE}"

# 2. 打包当前目录所有文件(排除 pack.sh 和压缩包自身)
echo "Creating ${TAR_NAME}..."
tar -czvf "${TAR_NAME}" \
    --transform="s|^./||" \
    --exclude="pack.sh" \
    --exclude="${TAR_NAME}" .

# 3. 将压缩包移动到上级目录
echo "Moving ${TAR_NAME} to parent directory..."
mv "${TAR_NAME}" ../

echo "Package created successfully: ../${TAR_NAME}"

关键步骤:

  1. 固定排除 pack.sh

    • 直接在 find 和 tar 命令中硬编码 --exclude="pack.sh",避免动态获取脚本名可能带来的问题。

  2. 仍然排除 checksum.txt 自身和压缩包

    • 确保校验文件不包含自己,且不会重复打包已生成的 .tar.gz

  3. --transform="s|^./||"

    • 确保解压后直接是文件,没有父目录层级。

使用方式
 

chmod +x pack.sh
./pack.sh v1.0.1

适用场景

  • 严格排除 pack.sh:避免动态获取脚本名可能导致的意外问题。

  • 干净打包:解压后直接是文件,适合 SDK/软件发布。

  • 校验文件完整checksum.txt 确保文件未被篡改。

如果需要排除更多文件(如 .gitignore、临时文件等),可在 find 和 tar 命令中添加 --exclude

===========================校验方法======================================

以下是一个 check.sh 脚本的实现,它可以对 checksum.txt 中记录的文件进行校验,打印校验结果,并将校验结果写入 checksum.log 文件。

#!/bin/bash

# 定义 checksum.txt 文件的路径
checksum_file="checksum.txt"

# 定义日志文件的路径
log_file="checksum.log"

# 执行校验操作,并将结果同时输出到终端和日志文件
echo "开始校验文件..." | tee -a $log_file
sha256sum -c $checksum_file 2>&1 | tee -a $log_file

# 检查校验结果是否有失败的情况
if [ $? -eq 0 ]; then
    echo "所有文件校验成功!" | tee -a $log_file
else
    echo "部分文件校验失败,请检查!" | tee -a $log_file
fi

脚本说明:

  1. 脚本头部#!/bin/bash 声明这是一个 Bash 脚本。
  2. 变量定义
    • checksum_file:指定 checksum.txt 文件的路径,这里假设它与脚本在同一目录下。
    • log_file:指定日志文件的路径,同样假设与脚本在同一目录下。
  3. 执行校验操作
    • sha256sum -c $checksum_file:执行校验操作。
    • 2>&1:将标准错误输出重定向到标准输出,这样所有的输出都会被捕获。
    • tee -a $log_file:将输出同时输出到终端和日志文件中,-a 选项表示追加到文件末尾。
  4. 检查校验结果
    • $?:表示上一个命令的退出状态码。如果为 0,则表示所有文件校验成功;否则,表示部分文件校验失败。
    • 根据退出状态码输出相应的提示信息,并将信息同时输出到终端和日志文件中。

使用方法:

  1. 将上述脚本保存为 check.sh 文件。
  2. 给脚本添加执行权限:
chmod +x check.sh
  1. 运行脚本:
./check.sh

运行脚本后,你可以在终端看到校验结果,同时校验结果也会被记录到 checksum.log 文件中。


网站公告

今日签到

点亮在社区的每一天
去签到