如何通过命令行检查校验和?

Joh*_*Doe 20 bash command-line

我想在UNIX变种的命令行上做类似的事情

if (shasum httpd-2.4.7.tar.bz2 == 19asdasdasd56462e44d61a093ea57e964cf0af05c0e) echo 'good to go'
Run Code Online (Sandbox Code Playgroud)

我不想写一个单独的脚本文本页面来检查这个.
上面的内容显示语法错误.但必须有一个光滑的方式来解决这个问题?

这该怎么做?

小智 19

shasum httpd-2.4.7.tar.bz2 |
  awk '$1=="19asdasdasd56462e44d61a093ea57e964cf0af05c0e"{print"good to go"}'
Run Code Online (Sandbox Code Playgroud)

所以通常你从shasum得到这个输出

19asdasdasd56462e44d61a093ea57e964cf0af05c0e *httpd-2.4.7.tar.bz2

我的命令是采用第一个字段$1,并将其与字符串进行比较.如果字符串匹配,则awk打印"good to go".

  • 对于大多数人来说也许是显而易见的,但是对于sha256,使用`sha256sum`。另外,对于那些想知道的人,像我一样:[awk](/sf/answers/2991188721/)和[awk](http://tldp.org/LDP/abs/html/awk.html)。 (4认同)

ipi*_*pid 11

简单地使用grep似乎是最好的方法:

> shasum httpd-2.4.7.tar.bz2 | grep 19ed9ee56462e44d61a093ea57e964cf0af05c0e
Run Code Online (Sandbox Code Playgroud)

当校验和正确时将突出显示:

命令执行快照

当校验和不正确时,不会显示任何内容。

还:

  • 检查$?bash 脚本。grep当找到某些东西时,退出并返回代码 0;当未找到任何内容时,退出代码为 1。
  • 如果给您一个大写的校验和,请使用grep -i <CHECKSUM>
  • 这种方法通常用于可以确保文件名中不存在校验和的情况,例如,curl -o或者wget -O然后检查。


Nes*_*iza 9

echo "19asdasdasd56462e44d61a093ea57e964cf0af05c0e  httpd-2.4.7.tar.bz2" \
  | shasum -c
Run Code Online (Sandbox Code Playgroud)


cze*_*asz 6

我使用上一个/最后一个命令的退出代码:

如果校验和有效,则最后执行的命令的退出代码为0

> echo "${PROMETHEUS_CHECKSUM} prometheus-${PROMETHEUS_VERSION}.linux-arm64.tar.gz" | sha256sum -c
> echo $?                                                                                         
0
Run Code Online (Sandbox Code Playgroud)

如果校验和是不正确的,那么退出代码是不同的0

> export PROMETHEUS_CHECKSUM='some garbage'
> echo "${PROMETHEUS_CHECKSUM} prometheus-${PROMETHEUS_VERSION}.linux-arm64.tar.gz" | sha256sum -c
prometheus-2.0.0.linux-arm64.tar.gz: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
> echo $?                                                                                         
1
Run Code Online (Sandbox Code Playgroud)

这是带有if声明的整个示例:

#!/bin/bash

...

echo "${PROMETHEUS_CHECKSUM} prometheus-${PROMETHEUS_VERSION}.linux-arm64.tar.gz" | sha256sum -c

if [ $? != 0 ]; then
  echo 'Prometheus checksum is not valid'
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)