我是awk的新手,我的命令如下。当没有行返回需要打印通过时,否则打印失败。但是当没有值时,传递无法显示
egrep -v "^\+" /etc/passwd | awk -F: '($1!="root" && $1!="sync" && $1!="shutdown" && $1!="halt" && $3<500 && $7!="/sbin/nologin") {print}' | awk '{if(NR==0||NR<=0||'null') print "pass"; else print "fail"}'
结果应该返回通过但是有打印,请就此提出建议。
答案 0 :(得分:1)
将all整合为一个,例如
$ awk -F: '!/^+/ && $1!="root" && ... {f=1; exit}
END {print (f?"fail":"pass")}' /etc/passwd
如果设置退出代码
,可能会更好$ awk -F: '!/^+/ && $1!="root" && ... {exit 1}' /etc/passwd
答案 1 :(得分:1)
这可能是你正在尝试做的事情:
awk -F: '/^+/ || $1~/^(root|sync|shutdown|halt)$/ || $3>=500 || $7=="/sbin/nologin"{next} {f=1; exit} END{print (f ? "pass" : "fail")}'