我正在比较脚本中的两个文件。使用命令
comm -3 123.txt 321.txt"
这两个文件 123 和 321 只有数字内容。
我也用
diff -ibw abc.txt cba.txt
这些文件 abc 和 cba 具有字母数字内容
如果没有不匹配,则不会打印输出,您能帮我如何编写如下条件。
如果没有差异,我需要打印files match
如果有差异,我想mismatch found
与不匹配的输出一起打印。
我正在比较脚本中的两个文件。使用命令
comm -3 123.txt 321.txt"
这两个文件 123 和 321 只有数字内容。
我也用
diff -ibw abc.txt cba.txt
这些文件 abc 和 cba 具有字母数字内容
如果没有不匹配,则不会打印输出,您能帮我如何编写如下条件。
如果没有差异,我需要打印files match
如果有差异,我想mismatch found
与不匹配的输出一起打印。
在 shell 脚本中非常容易。当您diff
在 Unix/Linux 中执行命令时,0
如果没有差异,则返回,如果有差异,则返回1
,您可以在系统变量中检查$?
。
例如:-
#!/bin/bash
diff abc.txt cba.txt > /dev/null 2>&1 #not to print the out put of from diff command
if [ $? -eq 0 ]; then
echo "files match"
else
echo "mismatch found"
fi
但是,如果您使用不同的命令,只需检查退出值,echo $?
同时成功和不成功,并if
相应地更改您的条件。
如果使用GNU bash
,请使用内置列表运算符&&
并||
执行此操作。
diff -ibw abc.txt cba.txt &>/dev/null && echo "Files Match" || echo "Files do not match"
来自man bash
:
&&
AND 和 OR 列表分别是由和││
控制运算符分隔的多个管道之一的序列。AND 和 OR 列表以左结合性执行。AND 列表具有以下形式command1 && command2
command2
当且仅当command1
返回退出状态为零时才执行。An OR list has the form command1 ││ command2
command2
当且仅当command1
返回非零退出状态时才执行。AND 和 OR 列表的返回状态是列表中执行的最后一个命令的退出状态。