AWK字符串条件不起作用

时间:2015-12-04 21:27:23

标签: bash unix awk sh

我正在尝试运行目录并确保root不是任何文件的所有者。使用awk,我遇到的问题是将字段与字符串进行比较不会产生准确的结果。

ls -d -l /path/to/file/**/* | awk '{ if ( "$3" == "root" ); print "File has wrong permissions: " $9;}'

生成的是一个文件列表,当双重检查时,其所有者和组不是root。

  

-rw-rw-r-- 1 foobar foobar 78828 Dec 4 11:15 /p/t/f/xyz/abc.jpg

理想情况下,最终结果如下:

ls -d -l /path/to/file/**/* | awk '{ if ("$3" != "deploy" || "$4" != "deploy") [...]

有什么问题?

谢谢。

2 个答案:

答案 0 :(得分:1)

语句中的问题是if条件之后的;。这意味着if-block为空 移除;或更好地将if-block放在{...}中,一切都会按预期运行。此外,您不应将字段放入"...""$3" - > $3

ls -d -l / | awk '{ if ( $3 == "root" ) print "File has wrong permissions: "$9;}'

ls -d -l / | awk '{ if ( $3 == "root" ){print "File has wrong permissions: " $9}}'

答案 1 :(得分:0)

您不想将$3放在引号中。如果你这样做就变成了一个字符串。另外,在if条件之后你不想要分号 - 如果你有,那么if什么都不做。您可能希望进行这两项更改:

ls -d -l /path/to/file/**/* | awk '{ if ( $3 == "root" ) print "File has wrong permissions: " $9;}'