首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较shell脚本上某个条件下的md5哈希值?

如何比较shell脚本上某个条件下的md5哈希值?
EN

Stack Overflow用户
提问于 2012-06-05 04:56:51
回答 3查看 7.8K关注 0票数 3

在代码下面提问。

代码语言:javascript
复制
#!/bin/sh

check() {   
    dir="$1"
    chsum1=`find ~/folder -type f -exec cat {} \; | md5` 
    chsum2=$chsum1

    for (( ; 0x$chsum1 == 0x$chsum2;  ))
    do
        echo "hello"
        sleep 10
        chsum2=`find ~/folder -type f -exec cat {} \; | md5`
    done

echo "hello"
#eval $2
}

check $*

目标是:使代码工作。它能做什么?将md5应用于文件夹,然后比较md5值。它会保持一个循环,直到值不同(这意味着文件夹上发生了一些事情),因此在10秒之后,当md5计算出它应该不同的散列时,代码就结束了。

两个问题

  1. 注意到在那里有一个注释。如果取消注释时间和注释for,您将注意到代码停止工作。为什么?我尝试了不同的组合来让它发挥作用。我附上了引号,用-eq,=,==等。我如何使它与一个整体一起工作呢?
  2. 就像现在的代码一样,如果它正在运行,那么我得到的输出是:

(:d41d8cd98f00b204e9800998ecf8427e == 97329acaae00bdf66e30ac53b49e1036:基值太大(错误标记为"97329acaae00bdf66e30ac53b49e1036")

代码语言:javascript
复制
Thus, how can I fix this is the second question and why this is happening.

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-05 05:07:14

(更新的)发布代码存在的问题是,当for循环工作时,您使用的是while循环。

下面的代码适用于我。我只是将for循环更改为while循环。

代码语言:javascript
复制
#!/bin/sh

check() {
        dir="$1"
        chsum1=`find ~/NASAtest -type f -exec cat {} \; | md5`
        chsum2=$chsum1

        while [ $chsum1 == $chsum2 ]
        do
                echo "hello"
                sleep 10
                chsum2=`find ~/NASAtest -type f -exec cat {} \; | md5`
        done

        echo "hello"
        #eval $2
}

check $*

while循环不能工作的原因是,在方括号和表达式之间缺少空格。

票数 2
EN

Stack Overflow用户

发布于 2014-01-13 22:20:17

您可以通过将Z放在值的前面,并将Z作为字符串进行比较,从而消除您正在比较的变量的格式或类型(值太大而不适合基本值)。

代码语言:javascript
复制
# read or operation to define $file1 & $file2 here ...
  val1=`md5sum ${file1} | awk '{print $1}'`
  val2=`md5sum ${file2} | awk '{print $1}'`
  tmpval="Z${val1}" ; val1="${tmpval}"
  tmpval="Z${val2}" ; val2="${tmpval}"
  if [[ "$val1" -eq "$val2" ]] ; then
    # files are the same, do operation here ..
  fi
done
票数 1
EN

Stack Overflow用户

发布于 2012-06-05 05:08:05

,而$chsum1 == $chsum2执行一些事情

这需要看起来像这样(包括换行符)

代码语言:javascript
复制
while [ $chsum1 == $chsum2 ]
do
 (perform some stuff)
done

注意方括号和do/done块周围的空格,而不是end

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10891800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档