如果文件的权限与644不同,我必须将文件的权限更改为644。
我想过这样的事情:
if [ $(stat -c %A $soubor) ! -eq (-rw-r--r--) ];then...
但是,它会出现如下错误:
预期的整数表达式
或者如果我稍微修改一下,那么:
语法错误):
答案 0 :(得分:1)
您使用[
错误。它与test
相同,因此man test
为您提供了手册页。
基本上,[
是一个用参数调用的程序。为了获得更好的外观,[
要求最后一个参数为]
,但没有技术原因。
当您致电[ $a == $b ]
时,它会失败,因为[
会将$a
与=
进行比较,并会抱怨它不期望的$b
。因此,如果您要开发符合POSIX标准,则需要使用=
代替==
。
-eq
执行数字比较,因此-rw-r--r--
会导致语法错误,因为它不是数字。
=
将进行字符串比较,因此这就是您所需要的。
您将与(-rw-r--r--)
进行比较,这将作为命令进行评估,因此您需要在其周围添加引号(请参阅我对您的问题的评论,我使用了八进制语法)。
此外,您需要移除大括号,使其变为'-rw-r--r--'
。我假设您添加了它们,因为它们位于if语句的左侧。
左边括号的原因是命令执行。当您将某些内容包装到$()
中时,它将被执行并且命令的输出将在那里填充。所以在shell评估表达式之后,它看起来像这样:
'[' '-rw-rw-rw-' '=' '-rw-r--r--' ']'
当您在shell脚本中的任何位置使用set -x
时,您可以看到它实际上有什么帮助。之后您可以使用set +x
禁用它,因为它非常详细。