我正在编写一个简单的 bash 脚本来执行以下操作:
1)检查两个文件(foo1和foo2)。
2) 如果 foo1 与 foo2 不同,并且 foo1 不为空,则发送电子邮件。
3) 如果 foo1 与 foo2 相同... 或者 foo1 为空... 则不执行任何操作。
空白状态让我很困惑。下面是我要开始的内容:
diff --brief <(sort ./foo1) <(sort ./foo2) >/dev/null
comp_value=$?
if [ $comp_value -ne 0 ]
then
mail -s "Alert" [email protected] <./alertfoo
fi
显然,这不会检查空白内容。有什么想法可以做到这一点吗?
答案1
您可以使用测试-s
运算符来检查文件是否为空,这cmp
通常是检查文件是否相等的最简单方法(请注意,您可以在语句中直接使用命令,if
这是将其退出状态与 0 进行比较的更简单替代方法)。我保留了在比较两个文件之前对其进行排序的部分;如果不需要,只需直接将这两个文件用作 的参数即可cmp
。
if [ -s ./foo1 ] && ! cmp -q <(sort ./foo1) <(sort ./foo2); then
...
您可以将上述内容理解为:“如果 ./foo1 不为空 ( [ -s ... ]
) 并且 ( &&
) ./foo1 和 ./foo2 的排序形式不 ( !
) 相同 ( cmp
)”。
答案2
您可以使用 -s 来检查文件是否为空:
if [[ -s $FILE ]] ; then
echo "$FILE has data."
else
echo "$FILE is empty."
fi
如果想知道字符串是否为空,请使用选项 -z 来检查是否为空:
STRING="test"
if [[ -n "$STRING" ]]; then
echo "String is not empty"
fi
或 -n 检查是否不为空:
STRING=""
if [[ -z "$STRING" ]]; then
echo "String is empty"
fi