【问题标题】:Check existing md5sum exist in file - Shell script检查文件中是否存在现有的 md5sum - Shell 脚本
【发布时间】: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

正如我在屏幕上看到的 - s1s2 具有相同的值。在文件中找到 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 个空格。您通过添加额外的 进行的检查显示了问题,但我没有注意到。

标签: shell ubuntu grep md5sum


【解决方案1】:

$s1 包含一个空格。 echo -n "1234" | md5sum 的输出包含两个。


替换

echo "s1: "$s1
echo "s2: "$s2

通过

echo "s1: $s1"
echo "s2: $s2"

查看问题。


替换

s2=$(echo -n "1234" | md5sum)

通过

s2=$(echo -n "1234" | md5sum | sed 's/  / /')

解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多