2012-12-07 119 views
1

我必须使用diff比较带有3个不同黄金文件的文件。 如果测试文件与三个金文件中的任何一个相同,我需要退出脚本exit 0如何在shell脚本中检查diff命令的输出?

我试过如下:

#!/bin/sh 
one=`diff -q NEW_GOLDEN_OUTPUT_ASYNC_1 /tmp/tmp_last_lines.log` 
two=`diff -q NEW_GOLDEN_OUTPUT_ASYNC_2 /tmp/tmp_last_lines.log` 
three=`diff -q NEW_GOLDEN_OUTPUT_ASYNC_3 /tmp/tmp_last_lines.log` 

if [[ $one || $two || $three ]]; then 
    exit 0 
else 
    exit 1 
fi 

但它返回在所有情况下exit 0。我正在使用/ bin/ksh shell。有什么建议么?

+0

要检查两个文件是相同的使用 '如果CMP -s“$ SOURCE_FILE”“ $ dest_file“;那么 :#个文件是相同的 否则 :#文件不同 fi' – Chipmunk

回答

1

您的代码查看diff的输出,但您应该查看退出代码。试试这个:

#!/bin/sh 
diff -q NEW_GOLDEN_OUTPUT_ASYNC_1 /tmp/tmp_last_lines.log && \ 
diff -q NEW_GOLDEN_OUTPUT_ASYNC_2 /tmp/tmp_last_lines.log && \ 
diff -q NEW_GOLDEN_OUTPUT_ASYNC_3 /tmp/tmp_last_lines.log 

&&如果前面的一个成功只会执行下一个命令。

另外,使用set -e(退出立即如果一个命令退出非零状态。):

#!/bin/sh 
set -e 
diff -q NEW_GOLDEN_OUTPUT_ASYNC_1 /tmp/tmp_last_lines.log 
diff -q NEW_GOLDEN_OUTPUT_ASYNC_2 /tmp/tmp_last_lines.log 
diff -q NEW_GOLDEN_OUTPUT_ASYNC_3 /tmp/tmp_last_lines.log