使用awk在UNIX中处理文件权限

使用awk在UNIX中处理文件权限,unix,awk,ls,Unix,Awk,Ls,我想知道使用shell脚本对文件授予了哪些权限。所以我使用下面的代码来测试一个文件。但它在输出中没有显示任何内容。我只是想知道我在哪里犯了错误。请帮帮我。 文件“1.py”已启用所有读写和执行文件 ls -l 1.py | awk ' {if($1 -eq "-rwxrwxrwx")print 'True'; }' True周围的单引号(”)应该是双引号(“),awk使用==进行字符串比较 但是,根据您尝试执行的操作,使用Bash内置测试可能会更干净: if [ -r 1.py -a -x

我想知道使用shell脚本对文件授予了哪些权限。所以我使用下面的代码来测试一个文件。但它在输出中没有显示任何内容。我只是想知道我在哪里犯了错误。请帮帮我。 文件“1.py”已启用所有读写和执行文件

 ls -l 1.py | awk ' {if($1 -eq "-rwxrwxrwx")print 'True'; }'
True
周围的单引号(
)应该是双引号(
),awk使用
==
进行字符串比较

但是,根据您尝试执行的操作,使用Bash内置测试可能会更干净:

if [ -r 1.py -a -x 1.py ]; then
  echo "Yes, we can read (-r) and (-a) execute (-x) the file"
else
  echo "No, we can't."
fi

这避免了必须解析ls输出。有关更长的检查列表,请参阅。

在awk中,您不应该编写shell测试,例如,
[…-eq…]
,您应该以awk的方式执行此操作:

如果($1==“随便什么”)…
您可以使用

ls -l 1.py | awk '{if ($1 ==  "-rwxrwxrwx") print "True" }'

我还认为
-rwxrwxrwx
是一个打字错误,
rwxrwxrwx
在这里的意思是(没有前导破折号)@g-v不,前导破折号必须在那里:它指示类型(
-
用于文件,
d
用于目录,等等)我如何添加else语句?ls-l$filemame | awk'{if($1=“-rwxrwxrwx”)打印“True”或打印“False”}“@AravindS作为您的示例:
awk'{print($1==“whatever”?“True”:“False”)}
awk'{if(…)print“T”;else print“F”}”“
如果我给你的代码,它会连续多次递归打印输出为1.py False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False假假假假假False@AravindS粘贴您执行的完整代码。我不明白为什么输出会是这样。@g-v
-eq
在awk中有效,但不用于检查左半部分和右半部分是否相等。相反,它会检查左半部分
-(减号)
eq变量。如果之前未分配
eq
变量,请选择
0(零)
@Kent虽然awk中没有-eq,但它不会导致语法错误,这一点并没有改变。@123请再次阅读我的评论,我没有说
-eq
是awkoperator@Kentg-v的评论清楚地表明,虽然没有运算符,但您的评论似乎在纠正它们,即使没有人认为这是无效语法@克劳迪姆:我没有投反对票,但你的回答不正确。你说
你可以使用…或…
第一个建议不起作用。它总是会变成真的。