Linux bash:比较哈希字符串而不设置变量

时间:2018-09-12 08:47:00

标签: linux bash awk md5sum sha1sum

我想要一个简单的bash命令来比较两个哈希值,该值输出它们是否相同。这是我尝试过的:

md5sum file1 | awk '{print $1}' # outputs hash value without filename

md5sum file1 > md5sum file2 # no output even though files/hashes differ

到目前为止,我已经尝试过以下几种变化,但均未成功:

[ md5sum states.txt | awk '{print $1}' == md5sum states_copy.txt | awk '{print $1}' ]

[ (md5sum states.txt | awk '{print $1}') == (md5sum states_copy.txt | awk '{print $1}') ]

我愿意使用脚本或多行bash解决方案,或者使用shasum,但是我是Linux和bash的新手,所以请尝试使其尽可能简单。

我正在运行Ubuntu 18.04。

2 个答案:

答案 0 :(得分:5)

[ "$(<states.txt md5sum)" = "$(<states_copy.txt md5sum)" ]
  1. 使用$(...)获取命令输出
  2. 请记住将$(...)放在"
  3. Bash测试支持单=进行字符串比较,而不支持双==
  4. 使用stdin并使用<重定向将文件重定向到md5sum中。

答案 1 :(得分:1)

有很多方法可以执行此操作,因为您使用过awk,因此可以尝试:

md5sum f1 f2|awk '{a[$1]}END{print NR==length(a)}'

如果两个哈希相同,则输出0,否则输出1。您可以将更多文件添加到md5sum

md5sum f1 f2 f3...fn|awk '{a[$1]}END{print NR==length(a)}'