在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
更新1:关于短路的快速说明
在你开始考虑哪些比较工具之前,请通过stat
命令检查它们的文件大小。
如果连这些都不匹配,那么从统计上来说,任何哈希算法都几乎不可能报告匹配的哈希。
我自己使用的一种方法是
xxhash
对它们进行高速批量运行。Keccak
或SHA3
系列中的Shake
,以确认它们是真正的重复项,排除所有合理怀疑==============================
如果只有一个< code>END块,但没有从文件或管道中读入任何内容,则< code>awk有一个有用的特性,即< code>NR = 0。
还可以在两种情况下重复使用相同的字符串,而无需使用三元运算符 ... ... ... : ...通过
利用任何基数的 0 次方
。
如果你没有太多的文件,这里有一个相当蛮力,但速度很快,可以一次完成。
--just remove the bckgrnd placing bit "... & )" if u wanna do it sequentially
|
for f1 in "${m2p}" "${m3l}" "${m3m}"; do
for f2 in "${m3m}" "${m2a}" "${m2p}" "${m3supp}" ; do
( diff "${f1}" "${f2}" |
{m,g}awk -F'^$' -v __="${f1}" -v ___="${f2}" '
END {
____=ENVIRON["HOME"]
sub(____,"~",__)
sub(____,"~",___)
print "checksums for \n\t\42"(__)"\42\n\t\b\b\b\band \42"\
(___)"\42 ===> " \
substr(" DO NOT match", ((_+= ++_)^++_+!!_)^!NR)"\n" }' &)
done ; done | gcat -b
1 checksums for
2 "~/m2map_main.txt"
3 and "~/m2map_main.txt" ===> match
4 checksums for
5 "~/m3vid_genie26.txt"
6 and "~/m3vid_genie26.txt" ===> match
7 checksums for
8 "~/m3vid_genie26.txt"
9 and "~/m2art_main_03.txt" ===> DO NOT match
10 checksums for
11 "~/m3vid_genie26.txt"
12 and "~/m3vid_genie25_supp.txt" ===> DO NOT match
13 checksums for
14 "~/m23lyricsFLT_05.txt"
15 and "~/m3vid_genie26.txt" ===> DO NOT match
16 checksums for
17 "~/m23lyricsFLT_05.txt"
18 and "~/m2art_main_03.txt" ===> DO NOT match
19 checksums for
20 "~/m23lyricsFLT_05.txt"
21 and "~/m3vid_genie25_supp.txt" ===> DO NOT match
22 checksums for
23 "~/m3vid_genie26.txt"
24 and "~/m2map_main.txt" ===> DO NOT match
25 checksums for
26 "~/m2map_main.txt"
27 and "~/m3vid_genie26.txt" ===> DO NOT match
28 checksums for
29 "~/m2map_main.txt"
30 and "~/m2art_main_03.txt" ===> DO NOT match
31 checksums for
32 "~/m2map_main.txt"
33 and "~/m3vid_genie25_supp.txt" ===> DO NOT match
34 checksums for
35 "~/m23lyricsFLT_05.txt"
36 and "~/m2map_main.txt" ===> DO NOT match
有很多方法可以修复脚本,但这可能是最简单的:
a=$(cat a)
if [ "$a" = "" ]; then
(正如注释中所建议的,如果您不需要<code>diff</code>输出,您可以使用退出代码。)
只需检查差异。
if diff s1 d1 ; then
echo "checksums match"
else
echo "checksums do not match"
fi
如果您不想在终端上有输出,可以使用cmp
。
if cmp -s s1 d2 ; then ...
问题内容: 查找进程aa.sh是否正在运行的linux命令是什么。ps命令似乎不起作用,并且不显示Shell脚本名称。 请指教。 问题答案: 检查一下
问题内容: 我需要这样的东西在PHP: 有什么解决办法吗? 问题答案: 在Linux / Mac OS上,请尝试以下操作: 然后在代码中使用它: 更新: @ camilo-martin建议,您可以简单地使用:
问题内容: 我有一个Node.js脚本所需的脚本,我想保持JavaScript引擎独立。 例如,我只想在Node.js下运行。如何执行此测试? 发布此问题时,我不知道Node.js模块功能是否基于CommonJS。 对于我给出的具体示例,一个更准确的问题是: 脚本如何判断是否已将其作为CommonJS模块使用? 问题答案: 通过寻求CommonJS支持 ,这是Underscore.js库的实现方式
本文向大家介绍如何在Linux中使用diff命令,包括了如何在Linux中使用diff命令的使用技巧和注意事项,需要的朋友参考一下 diff命令逐行分析并显示两个文件之间的更改列表。作为一种特殊情况,diff将标准输入的副本与其自身进行比较。本文介绍“如何在Linux中使用diff命令。 “ diff”命令的期货– 识别一个文件版本之间的更改 比较两个配置或程序文件 创建一个可以与Linux /
问题内容: 好吧,我是SQL的新手,我刚刚读到,存储过程始终返回一个值,确定该过程中的查询是否已成功执行是一种很好的做法。 所以我有一个带有select语句的简单存储过程,如果要执行,我想返回1,否则返回-1。 您能告诉我如何用SQL编写该条件吗? 如果有关系,我的数据库是MS SQL Server。 谢谢你。 问题答案: 使用输出参数返回成功状态以及Try..Catch块
问题内容: 如何检查python脚本中是否存在程序? 假设您要检查或是否可用。我们假设他们应该在路上。 最好看到一个多平台解决方案,但就目前而言,Linux足够了。 提示: 运行命令并检查返回代码并不总是足够的,因为某些工具即使尝试也会返回非0结果。 检查命令时,屏幕上不应显示任何内容 另外,我希望能找到更通用的解决方案,例如 问题答案: import subprocess import os