Bash 文件未正确完成

Bash file not completing correctly

我编写了以下 bash 脚本,该脚本旨在在服务器上的 UFW 规则发生更改时创建一个文件。然后将使用 Zabbix 检查此文件是否存在。

#!/bin/bash

file="/tmp/ports.txt"
file_open="/tmp/open_ports.txt"
md5_file=$(md5sum /tmp/ports.txt | awk '{ print  }')
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print  }')
file_diff="/tmp/ports_diff"

if [[ ! -f $file ]]; then
  touch $file && sudo ufw status|grep ALLOW > $file
fi

if [ -f $file_diff ];then
rm $file_diff
fi

sudo ufw status|grep ALLOW > $file_open

if [ $md5_file != $md5_file_open ];then
touch $file_diff
fi

我发现有时文件没有在应该创建或删除的时候创建或删除,但是如果我第二次或第三次 运行 命令没有做任何进一步的更改,它就会创建或删除。

请帮忙。

谢谢

第一次调用时,文件“/tmp/ports.txt”和“/tmp/open_ports.txt”不存在。在第一个 运行 之后,两个文件都应该被创建并且 diff 是空的。

在此之后,ufw status 发生了变化。

在接下来的运行中,语句

md5_file=$(md5sum /tmp/ports.txt | awk '{ print  }')
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print  }')

将处理原始文件(没有更改状态),因此它们将对相同的文件进行操作。不会发现差异。
在此期间 运行 $file_open 将填充新值,但此更改后不会调用 md5sum 函数。将不会进行差异化。

下一个运行从改变后的$file_open开始,找到不同之处。

当status改回原来的值时,先运行旧文件的md5,想看看有什么区别,并没有删除diff文件。此 运行 还将使用新值写入 $file_open,将在下一个 运行.

中检测到

解决方法: 将 2 md5sum 行移动到最后一个 sudo 之后。