【发布时间】:2017-09-11 12:21:14
【问题描述】:
我使用的是 Ubuntu 14.04。
我有一个存储在a.txt 文件中的 md5 散列文本列表。现在我将输入一个文本,我将对其进行散列并检查结果是否在我的文件中。我正在使用grep 来执行此操作,但该脚本仅适用于静态字符串。
我的脚本文件看起来像
file="a.txt"
s1="81dc9bdb52d04dc20036dbd8313ed055 -"
echo "s1: "$s1
s2=$(echo -n "1234" | md5sum)
echo "s2: "$s2
if grep -Fx "$s1" "$file"; then
echo 's1 FOUND'
else
echo 's1 NOT FOUND'
fi
if grep -Fx "$s2" "$file"; then
echo 's2 FOUND'
else
echo 's2 NOT FOUND'
fi
在a.txt 文件中,我只有 1 行:
81dc9bdb52d04dc20036dbd8313ed055 -
如上脚本,您可以看到,我将s1 的值设置为静态字符串,s2 是散列的结果。
我得到的输出:
s1: 81dc9bdb52d04dc20036dbd8313ed055 -
s2: 81dc9bdb52d04dc20036dbd8313ed055 -
81dc9bdb52d04dc20036dbd8313ed055 -
s1 FOUND
s2 NOT FOUND
正如我在屏幕上看到的 - s1 和 s2 具有相同的值。在文件中找到 s1,但在 s2 中找不到。我不明白这里出了什么问题以及如何解决。
【问题讨论】:
-
当输入为标准输入时,我的 md5 实现(在 FreeBSD 上)不输出“-”。你确定它在那里吗?留白呢?你应该使用
echo "s2: <$s2>"。 -
我确定 s2 的值。您建议的输出: s2:
-
好的。添加
if test "$s1" = "$s2"; then echo equal; else echo unequal; fi会是什么结果? -
您还应该将
set -x放在靠近顶部的位置以在shell 中启用跟踪模式。 -
正如赛勒斯在下面所说,当 s1 只有 1 时,我的 s2 字符串实际上在减号前有 2 个空格。您通过添加额外的 进行的检查显示了问题,但我没有注意到。