我目前正在尝试创建一个bash脚本,该脚本将检查每个users / Library / Mail文件夹的内部,以查看是否存在名为V2的文件夹。该脚本应创建一个数组,其中数组中的每个项目都是用户,然后遍历每个用户,检查其主文件夹中是否有上述标题内容。这就是我到目前为止所做的:
#!/bin/bash
cd /Users
array=($(ls))
for i in ${array[@]}
do
if [ -d /$i/Library/Mail/V2 ]
then
echo "$i mail has been upgraded."
else
echo "$i FAIL"
fi
done
答案 0 :(得分:5)
当您拥有带空格的用户名时,从ls
的输出填充数组会导致严重问题。请改用glob表达式。此外,使用[ -d $i/... ]
同样会破坏带空格的名称 - 使用[[ -d $i/... ]]
([[ ]]
构造具有自己的语法规则且不需要引用)或[ -d "$i/..." ]
(带引号)。
类似地,您需要双引号"${array[@]}"
以避免字符串拆分与使用两个空格拆分名称,如下所示:
cd /Users
array=(*)
for i in "${array[@]}"; do
if [[ -d $i/Library/Mail/V2 ]]; then
echo "$i mail has been upgraded."
else
echo "$i FAIL"
fi
done
那就是说,你根本不需要一个数组:
for i in *; do
...check for $i/Library/Mail/V2...
done