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" [email protected] <./alertfoo

fi

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

解决方法

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

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

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...