【问题标题】:Bash file not completing correctlyBash 文件未正确完成
【发布时间】:2017-06-21 16:21:11
【问题描述】:

我编写了以下 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

我发现有时该文件没有被创建或删除,但如果我第二次或第三次运行该命令而没有任何进一步的更改,它确实如此。

请帮忙。

谢谢

【问题讨论】:

  • 特定用户的sudo 是否配置为无需密码即可运行?
  • 是的,命令手动执行很好。

标签: bash ufw


【解决方案1】:

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

在此之后,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 之后。

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多