1

我必须将一个文件与 3 个不同的黄金文件使用diff. 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 外壳。有什么建议么?

4

1 回答 1

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
于 2012-12-07T10:23:47.967 回答