linux – 如何在同一个if / then 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" bob@bob.com <./alertfoo

fi

显然,这不会检查空白内容.有关如何做到这一点的任何想法?

解决方法

您可以使用test的-s运算符来检查文件是否为空,而cmp通常是检查文件是否相等的最简单方法(请注意,您可以直接在if语句中使用命令作为比较其退出状态的简单替代方法0).在比较它们之前,我保留了对两个文件进行排序的位置;如果不需要,只需将这两个文件直接用作cmp的参数.
if [ -s ./foo1 ] && ! cmp -q <(sort ./foo1) <(sort ./foo2); then
    ...

您可以阅读以上内容:“如果./foo1不为空([-s …])AND(&&),则./foo1和./foo2的排序形式不是(!)相同( CMP)”.

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...