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