Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在solaris中使用awk_Awk_Solaris - Fatal编程技术网

在solaris中使用awk

在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

我正在使用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 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