2014-09-02 48 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