macos shell脚本校验文件哈希值需用md5 -q或shasum -a 256 | cut -d' ' -f1提取纯哈希,再与小写预期值逐字符严格比对,并检查文件存在性、路径空格及校验清单格式(双空格分隔),确保ci/cd中可靠失败退出。
直接在 shell 脚本里校验下载文件的哈希值,核心是用 macos 自带命令生成本地哈希,再与预期值做严格比对。不需要额外安装工具,关键在于写法可靠、容错清晰、避免路径或空格干扰。
用 md5 或 shasum 命令提取纯哈希值
macOS 的 md5 和 shasum 默认输出带前缀和路径,脚本里必须剥离冗余内容,只保留 32 位(MD5)或 64 位(SHA256)十六进制字符串。推荐方式:
- 获取 MD5 纯值:
md5 -q "$file" - 获取 SHA256 纯值:
shasum -a 256 "$file" | cut -d' ' -f1 - 注意:
$file必须加双引号,防止路径含空格或特殊字符时报错
在脚本中做字符级精确比对
不能依赖模糊匹配或部分字符串检查,必须逐字符比对。示例结构:
expected_md5="a1b2c3d4e5f678901234567890abcdef" actual_md5=$(md5 -q "$file") if [ "$actual_md5" = "$expected_md5" ]; then echo "✅ MD5 校验通过" else echo "❌ MD5 不匹配:期望 $expected_md5,实际 $actual_md5" exit 1 fi
同理用于 SHA256:
expected_sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" actual_sha256=$(shasum -a 256 "$file" | cut -d' ' -f1) if [ "$actual_sha256" = "$expected_sha256" ]; then echo "✅ SHA256 校验通过" else echo "❌ SHA256 不匹配" exit 1 fi
批量校验多个文件并自动失败退出
适合 CI/CD 或部署脚本场景。用 shasum -c 验证预生成的校验清单(如 checksums.sha256),该文件需符合标准格式:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 file1.zip a1b2c3d4e5f678901234567890abcdef file2.dmg
脚本中调用:
if shasum -a 256 -c checksums.sha256 2>/dev/null; then echo "✅ 所有文件校验通过" else echo "❌ 校验失败,请检查文件或校验清单" exit 1 fi
注意:每行哈希与文件名之间必须是两个空格(不是 Tab),且文件名路径要与当前工作目录一致,否则会报 “No such file”。
处理常见陷阱
- 文件路径含中文或空格?务必用
"$file"引用变量 - 下载未完成就校验?先用
[ -f "$file" ] && [ -s "$file" ]检查文件存在且非空 - 官网提供的哈希值带空格或换行?用
tr -d '[:space:]'清洗后再比对 - 区分大小写?macOS 哈希值默认小写,确保预期值也是小写(SHA256 通常全小写,不建议混用大写)
不复杂但容易忽略











