在Unix shell脚本中,我想通过if语句检查diff命令的输出是否等于0。这样我就可以相应地给予if case语句。
例如:Abc.sh
# !/bin/bash
cd users
diff s1 d1 > a.txt
wc -l a.txt | awk '{print f1}' > a
echo "value of a is"
cat a
if [ $a == 0 ]
then
echo "checksums match"
else
echo "checksums do not match"
fi
输出量:
value of a is
0
[: ==: unary operator expected
checksums do not match
3条答案
按热度按时间dgiusagp1#
只需检查差异。
如果你不想在终端上有输出,你可以使用
cmp
。irlmq6kh2#
有许多方法可以修复脚本,但这可能是最简单的方法:
1.变量与文件不同,因此必须读取所创建文件的输出。
1.可能包含空格的变量在用作参数时必须用引号引起来,并且字符串必须与空值而不是0进行比较。
(As注解中建议,如果不需要
diff
输出,可以使用退出代码。)whlutmcx3#
更新1:关于短路的快速说明
在你甚至开始考虑哪个比较工具,检查他们的文件大小通过
stat
命令.如果连这些都不匹配,那么从统计学上讲,任何哈希算法都几乎不可能报告匹配哈希。
我自己使用的一种方法是
1.检查文件大小
1.对于匹配的,在
xxhash
上对它们进行高速批处理运行。1.最后,***仅***对于步骤2中建议的副本,通过加密可接受的散列(如
SHA3
系列中的Keccak
或Shake
)再次运行它们,以确认它们确实是副本,排除所有合理怀疑awk
有一个有用的特性,如果你只有一个END
块,但是没有从文件或管道中读入任何东西,那么它就有NR = 0
。通过利用
0th-power of any base
,还可以在不使用三元运算符… ? … : …
的情况下对两种情况重用相同的字符串。如果你没有太多的文件,这里有一个蛮力,但高速的方式来做这一切一次。
|