0

我对 Linux 和 shell 脚本非常陌生,我被困在我必须编写的脚本的某个部分上。这是课堂作业。

我需要编写一个循环来检查是否有用户(在我的组中)使用 write 开关打开了 public_html 文件rwx。这样我就可以将信息写入其中,而不是public_html在我获得所需信息后从该组成员那里检索它。

这就是我现在的位置:

while read temp;do

# this is my main hang up, to see it this global 
# switch is turned on to write.
if[[ <9> = 'w' ]] 
echo "$temp has their w switch turned on."

# this also is throwing me off, i think this is the way to 
# keep going until all the public_html directories in the 
# group have been seen.
done < ..public_html 

或者我正在试图弄清楚如何使用 find 命令,这在逻辑上似乎更简单,更有意义,我只是从未使用过它,所以我在这方面有点坐不住了,我试过这条线没有有用,也许它接近?

find . */home/public_html -perm -g +w
#I was hoping that would search all user directories looking for the permission +w turned on in public_html.
4

2 回答 2

3

您是否需要使用循环来执行此操作?这似乎是天作之合find。特别是-perm-gid、 和-type测试在这里会很有用。

你能更详细地解释一下你的环境吗?您是否正在寻找public_html在用户主目录中命名的文件?还是您在当前目录中寻找文件/文件夹?还是完全不同的东西?

一些使用提示find

  • 使用-type d测试将结果限制在文件夹中
  • 使用-name测试将您的结果限制为名为“public_html”的内容
  • 使用-gid测试将您的结果限制在您组中的内容(该id -g命令应报告您的组 ID)
  • 使用-perm -g+w测试将结果限制为可组写的内容

结合所有这些,您应该能够准确地过滤出您正在寻找的内容。我链接到的手册页底部有一个“示例”部分,显示了如何使用各种参数。您可能还想查看find教程以获取更多带有解释的示例。

于 2013-02-25T22:04:31.397 回答
2

如果您在组中,则您可以阅读目录。

shopt -s globstar

for i in **/*/; do
    test -x "$i" && echo "$i have 'x' bit"
done

要求bash --version>=4

于 2013-02-25T20:21:53.627 回答