Bash文件未正确完成

时间:2017-06-21 16:21:12

标签: bash ufw

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

#!/bin/bash

file="/tmp/ports.txt"
file_open="/tmp/open_ports.txt"
md5_file=$(md5sum /tmp/ports.txt | awk '{ print $1 }')
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print $1 }')
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

我发现有时文件不会被创建或删除,但是如果我第二次或第三次运行命令而没有任何进一步的改变,那就是。

请帮忙。

由于

1 个答案:

答案 0 :(得分:1)

在第一次调用期间,文件“/tmp/ports.txt”和“/tmp/open_ports.txt”不存在。第一次运行后,应创建两个文件,diff为空。

此后,ufw status会发生变化。

在下一次运行中,语句

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

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

下一次运行将以更改后的$file_open开始,并找到差异。

当状态更改回原始值时,第一个在旧文件上运行md5,键入以查看差异而不删除diff文件。此运行还将使用新值写入$file_open,将在下次运行时检测到。

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