2012-05-16 128 views
2

我正在嘗試創建一個bash腳本,它將檢查每個用戶/庫/郵件文件夾的內部,以查看是否存在名爲V2的文件夾。該腳本應該創建一個數組,其中的每個項目都是用戶,然後遍歷每個用戶檢查其主文件夾的上述內容。這是我到目前爲止有:在bash中循環訪問數組

#!/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 
+0

完美工作。謝謝! –