编写比较 BATCH 文件以验证 sha256sum 是不是为已发布的代码
Posted
技术标签:
【中文标题】编写比较 BATCH 文件以验证 sha256sum 是不是为已发布的代码【英文标题】:Writing a comparison BATCH file to verify sha256sum to released code编写比较 BATCH 文件以验证 sha256sum 是否为已发布的代码 【发布时间】:2022-01-18 00:06:32 【问题描述】:尝试编写一个带有 2 个参数($1 和 $2)的脚本,其中一个代表 $hash 和 $file_name。
我正在尝试利用jq
来解析下载所需的数据并比较PASS 或FAIL。
我发现自己无法思考这个问题。
这是我的代码
#!/usr/bin/env sh
#
# Sifchain shasum check (revised).
#
# $1
hash_url=$( curl -R -s https://api.github.com/repos/Sifchain/sifnode/releases | jq '.[] | select(.name=="v0.10.0-rc.4")' | jq '.assets[]' | jq 'select(.name=="sifnoded-v0.10.0-rc.4-linux-amd64.zip.sha256")' | jq '.browser_download_url' | xargs $1 $2 )
echo $hash_url
# $2
hash=$( curl -s -L $hash_url | jq'.$2')
file_name=$(curl -R -s https://api.github.com/repos/Sifchain/sifnode/releases | jq '.[] | .name')
#
#
echo $hash | sha256sum
echo $file_name | sha256sum #null why?
echo "\n"
## version of the release $1, and the hash $2
## sha256 <expected_sha_256_sum> <name_of_the_file>
sha256()
if echo "$1 $2" #| sha256sum -c --quiet
then
echo pass $1 $2
exit 0
else
echo FAIL $1 $2
exit 1
fi
# Invoke sha256
sha256 $hash_url $file_name
理想情况下,这应该适用于任何哈希与正确文件的比较,在调用 BASH 脚本时提取 2 个参数。
【问题讨论】:
jq'.$2'
对我来说看起来不正确。你是说jq ".$2"
吗?
我认为你是对的,单引号和双引号总是抛出我。
curl -R -s https://api.github.com/repos/Sifchain/sifnode/releases | jq '.[] | .name'
返回多个名称。
【参考方案1】:
我可以建议以下更正/修改:
#!/bin/bash
#sha file
SHA_URL=$(curl -R -s https://api.github.com/repos/Sifchain/sifnode/releases | \
jq --arg VERSION v0.10.0-rc.4 -r \
'.[] | select(.name==$VERSION) | .assets[] | select(.name |test("\\.sha256$")) | .browser_download_url')
SHA_VALUE=$(curl -s -L $SHA_URL| tr 1 2)
FILENAME=$(curl -R -s https://api.github.com/repos/Sifchain/sifnode/releases | \
jq --arg VERSION v0.10.0-rc.4 -r \
'.[] | select(.name==$VERSION) | .assets[] | select(.content_type =="application/zip") | .name')
#added just for testing, I'm assuming you have the files locally allready
FILEURL=$(curl -R -s https://api.github.com/repos/Sifchain/sifnode/releases | \
jq --arg VERSION v0.10.0-rc.4 -r \
'.[] | select(.name==$VERSION) | .assets[] | select(.content_type =="application/zip") | .browser_download_url')
wget --quiet $FILEURL -O $FILENAME
echo $SHA_VALUE $FILENAME | sha256sum -c --quiet >/dev/null 2>&1
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo -n "PASS "
else
echo -n "FAIL "
fi
echo $SHA_VALUE $FILENAME
exit $RESULT
注意事项:
jq--arg VERSION v0.10.0-rc.4
创建要在脚本中使用的“变量”
-r
- 原始输出,字符串不被引用
test("\\.sha256$")
- 正则表达式,用于搜索通用 sha256,因此您不必硬编码全名
select(.content_type =="application/zip")
- 我假设这是您正在搜索的文件
wget 仅用于演示目的,要下载文件,我假设您的机器上已经有了该文件
sha256sum -c --quiet >/dev/null 2>&1
- 重定向到 /dev/null 是必要的,因为如果出现错误,sha256sum 不会安静
【讨论】:
谢谢,@Sorin 这对我很有帮助。以上是关于编写比较 BATCH 文件以验证 sha256sum 是不是为已发布的代码的主要内容,如果未能解决你的问题,请参考以下文章
windows 查看文件 MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512码
如何将 powershell 中文件的 SHA256 哈希值与已知值进行比较?附加问题