我如何检查string匹配和一个空的文件在相同的if /然后bash脚本语句?

我正在写一个简单的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 

显然这不检查空白内容。 任何想法如何做到这一点?

您可以使用testing的-s运算符来检查文件是否为空,并且cmp通常是检查文件是否相等的最简单方法(请注意,您可以直接在if语句中使用命令作为比较其退出状态的简单替代方法与0)。 在比较这两个文件之前,我会保留这个位置。 如果不需要,直接使用这两个文件作为参数的cmp

 if [ -s ./foo1 ] && ! cmp -q <(sort ./foo1) <(sort ./foo2); then ... 

你可以阅读上面的内容:“如果./foo1不为空( [ -s ... ] )AND( && )./foo1和./foo2的sortingforms不是( ! )相同( cmp )” 。

您可以使用-s来检查文件是否为空:

 if [[ -s $FILE ]] ; then echo "$FILE has data." else echo "$FILE is empty." fi 

如果您想知道string是否为空,请使用选项-z检查是否为空:

 STRING="test" if [[ -n "$STRING" ]]; then echo "String is not empty" fi 

或-n检查是否为空:

 STRING="" if [[ -z "$STRING" ]]; then echo "String is empty" fi