2017-06-21 79 views
0

我寫了下面的bash腳本,它被設計用來在服務器上修改UFW規則時創建一個文件。這個文件的存在將被Zabbix檢查。Bash文件沒有正確完成

#!/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 

什麼我發現是,有時文件犯規獲得創建或當它應該被刪除,但如果我運行命令,而不任何進一步改變第2或第3次,它的作用。

請幫忙。

感謝

+0

對於配置爲無密碼運行的特定用戶,是'sudo'? – sjsam

+0

是的,命令手動執行罰款。 – user2099762

回答

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之後。