验证文件的 SHA-256 总和,如果不符合预期则退出脚本

dav*_*726 2 linux bash shell sha sh

我正在尝试制作一个 bash 脚本来自动安装我经常使用的软件,但我遇到了一个小问题。我希望我的脚本验证下载文件的 sha256sum 的有效性,如果不是预期的,则以成功消息响应或以错误消息退出。

这是我到目前为止尝试过的(它有点工作但不会在失败时退出):

shasum panel.tar.gz |
awk $1=="acca80528628ad362c5733229203a6c4bb3d648a9c40be318ff9f4f9653d505d"{print"SHA256SUM validated, installation may proceed"}
Run Code Online (Sandbox Code Playgroud)

它是安装脚本的一部分,我希望它验证 shasum,然后如果它与预期不匹配acca80528628ad362c5733229203a6c4bb3d648a9c40be318ff9f4f9653d505d,它应该退出整个脚本。我上面给出的行保持脚本按原样运行而不会停止,即使 shasum 与预期不匹配。

che*_*ner 5

使用进程替换来动态创建校验和文件shasum -c

checksum=acca80528628ad362c5733229203a6c4bb3d648a9c40be318ff9f4f9653d505d
shasum -c <(echo "$checksum panel.tar.gz")
Run Code Online (Sandbox Code Playgroud)

或者将内容通过管道传输到shasum,使用-作为文件名:

echo "$checksum panel.tar.gz" | shasum -c -
Run Code Online (Sandbox Code Playgroud)

查看退出状态以确定是否继续。

if ! echo "$checksum panel.tar.gz" | shasum -c -; then
    echo "Checksum failed" >&2
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

如果你不想立即退出以外的任何事情,你可以使用

echo "$checksum panel.tar.gz" | shasum -c - || exit 1
Run Code Online (Sandbox Code Playgroud)