在solaris中使用awk
我正在使用Solaris 5.10,我想解析在solaris中使用awk,awk,solaris,Awk,Solaris,我正在使用Solaris 5.10,我想解析/etc/default/passwd,并检查最小密码长度。以下是我正在使用的脚本: 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
/etc/default/passwd
,并检查最小密码长度。以下是我正在使用的脚本:
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
,PASSLENGTH
是以PASSLENGTH=N
格式写入的
Awk使用空格/制表符/换行符作为默认分隔符。
这意味着您的$1
实际上是PASSLENGTH=6
,$2
被设置为nothing,以解释if语句失败的原因
试一试
您还可以更改awk,这样就不必在开始时声明变量
awk -F= '$1 == "PASSLENGTH" && $2 != "6" {x=1} END{exit x}
总之,我认为这是最短的
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
为什么是awk?如果用python编写,您会得到更多帮助。单独运行awk命令,看看输出是什么,很可能两个参数都不匹配。Solaris!=linux。您应该删除linux标记。@Jidder自己运行awk时会出现语法错误,awk:第1行附近的语法错误awk:使用/usr/xpg4/bin/awk
而不是标准的awk在第1行附近退出。请注意,配置文件可能在行的开头包含#
。更可靠的解决方案可能是/^PASSLENGTH=6/
。
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