我正在尝试编写一个 bash 脚本,该脚本采用用户主目录并循环遍历第一级子目录,并且仅当这些目录不是/Library 或/Public 文件夹时才对这些目录执行一些维护。到目前为止,我的代码不起作用,因为我收到一条错误消息,指出 $dir 返回的目录名称是一个目录。这是代码:
#!/bin/bash
user="short name"
source_root="/Users/"
source_use="$source_root$user"
cd "$source_use"
dirarr=( */ )
echo ${dirarr[@]}
for dir in "${dirarr[@]}"
do
if ( "$dir" -ne "/Library" -o "$dir" -ne "/Public")
then echo $dir.
# do something
fi
done
任何人都可以帮我完成这个工作吗?
非常感谢
最佳答案
您的脚本有几个问题:
您需要使用
[ ]
或[[ ]]
在你的if
声明,而不是( )
。在您的示例中( )
创建一个子 shell 并尝试运行命令"$dir"
,这就是您收到错误消息的原因。您正在与找不到的字符串进行比较 - 尝试
"Library/"
和"Public/"
相反。您可能想要
-a
而不是-o
。-ne
用于比较数字。您想要!=
.
这是脚本的更正版本:
#!/bin/bash
user="short name"
source_root="/Users/"
source_use="$source_root$user"
cd "$source_use"
dirarr=( */ )
echo ${dirarr[@]}
for dir in "${dirarr[@]}"
do
if [ "$dir" != "Library/" -a "$dir" != "Public/" ]
then
echo $dir.
# do something
fi
done
关于bash - 检查目录是否为/Library或/Public,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13982039/