代码下面的问题。
#!/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值。它维持一个循环,直到值不同(这意味着文件夹上发生了某些事情),因此在md5计算散列后10秒内它应该是不同的,然后代码结束。
两个问题。
((:d41d8cd98f00b204e9800998ecf8427e == 97329acaae00bdf66e30ac53b49e1036:基数值太大(错误标记为“97329acaae00bdf66e30ac53b49e1036”)
Thus, how can I fix this is the second question and why this is happening.
谢谢!
答案 0 :(得分:2)
您对(已更新)发布的代码所遇到的问题是,当for
循环有效时,您正在使用while
循环。
以下代码适用于我。我只是将for
循环更改为while
循环。
#!/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循环不起作用的原因是因为你在方括号和表达式之间缺少空格。
答案 1 :(得分:1)
您可以通过在值前面放置一个Z并将其作为字符串进行比较来消除对您要比较的变量的格式或类型(对于基数来说太大了)的混淆。
# 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
答案 2 :(得分:0)
而[$ chsum1 == $ chsum2]确实执行了一些结束
这需要看起来像这样(包括换行符)
while [ $chsum1 == $chsum2 ]
do
(perform some stuff)
done
请注意方括号和do
/ done
块周围的空格而不是end
。