2014-09-02 49 views
0

我在Solaris 5.10上工作,我想解析/etc/default/passwd並檢查最小密碼長度。以下是我使用的腳本:在solaris中使用awk

if awk -v x=1 '$1 == "PASSLENGTH" && $2 == "6" {x=0} END{exit x}' /etc/default/passwd 
     then 
      echo "Control Area: User Identity Management; Ensure that minimum password length is set ; compliant" >> /etc/chef/report.txt   
     else 
      echo "Control Area: User Identity Management; Ensure that minimum password length is set ; Non compliant" >> /etc/chef/report.txt   
     fi 

如果最低PASSLENGTH等於6,我贊同在我report.txt文件兼容。但問題是我的代碼不在if區塊內,即使PASSLENGTH變量的值等於/etc/default/passwd中的6

+0

爲什麼awk?如果你在python中寫這個,你會得到更多的幫助。 – bmargulies 2014-09-02 08:24:51

+0

運行awk命令,看看輸出是什麼,可能兩個參數都不匹配。 – 2014-09-02 08:28:31

+2

Solaris!= linux。你應該刪除linux標籤。 – Kent 2014-09-02 08:28:33

回答

2

PASSLENGTH的格式爲PASSLENGTH=N
Awk使用空格/製表符/換行符作爲默認分隔符。
這意味着你的$1實際上是PASSLENGTH=6$2被設置爲沒有解釋爲什麼if語句失敗。

嘗試

if awk -F= -v x=1 '$1 == "PASSLENGTH" && $2 == "6" {x=0} END{exit x}' /etc/default/passwd 
     then 
      echo "Control Area: User Identity Management; Ensure that minimum password  length is set ; compliant" >> /etc/chef/report.txt   
     else 
      echo "Control Area: User Identity Management; Ensure that minimum password length is set ; Non compliant" >> /etc/chef/report.txt   
fi 

你也可以改變AWK所以你沒有在一開始

awk -F= '$1 == "PASSLENGTH" && $2 != "6" {x=1} END{exit x} 

所有awk來聲明一個變量,最短我認爲它可以

awk '/^PASSLENGTH=6/{x=1} 
    END {print "Control Area: User Identity Management; Ensure that minimum password length is set; " (x?"compliant":"non compliant") >> "/etc/chef/report.txt"}' /etc/default/passwd 
+0

與nawk運行你的腳本工作的魅力。 – tortuga 2014-09-02 08:50:00

+0

請注意,可能會發生配置文件在行首中包含'#'。一個更強大的解決方案可能是'/^PASSLENGTH = 6 /'。 – fedorqui 2014-09-02 09:07:58

+0

@fedorqui好點。我編輯過 – 2014-09-02 09:10:19