我正在学习 shell 脚本,并且正在编写一个脚本,其中列出了用户拥有“7”权限的文件,即“rwx”。到目前为止我已经写了这个:
for F in *
do
a= $(stat -c "%a" "$F")
echo $a
if ((b==7))
then
echo $F
fi
done
这里a的值为“1”。我在这里做错了什么?
答案1
在 shell 中,空间很重要。代替
a= $(stat -c "%a" "$F")
和:
a=$(stat -c "%a" -- "$F")
(还添加--
选项分隔符,以便该命令仍然适用于以 开头的文件名-
)
或者
a=$(stat -Lc "%a" -- "$F")
如果对于符号链接,您需要符号链接目标的权限(因为在大多数系统上,符号链接本身的权限不相关)。
例子
为了简单起见,我们只需stat
在单个文件上运行该命令,然后在交互式命令行中执行此操作:
$ stat -c "%a" file
660
现在,让我们尝试使用空格的命令:
$ a= $(stat -c "%a" file)
bash: 660: command not found
$ echo a=$a
a=
我们收到一条错误消息,并且a
未设置为新值。 (如果像您的情况一样,a
之前已分配给1
,则它将保持不变1
。)现在尝试不使用空格:
$ a=$(stat -c "%a" file)
$ echo a=$a
a=660
这有效。 a
已成功设置为命令返回的数字stat
。