如何在shell脚本中检查diff命令的输出?

时间:2012-12-07 10:02:49

标签: shell

我必须使用diff将文件与3个不同的黄金文件进行比较。 如果测试文件与三个黄金文件中的任何一个相同,我需要使用exit 0退出脚本。

我尝试了以下内容:

#!/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。有什么建议吗?

1 个答案:

答案 0 :(得分: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