在工作中,我們有7或8個派往全國各地的硬盤驅動器,每個硬盤驅動器都有唯一的不連續的標籤。BASH,多個陣列和一個循環
理想情況下,驅動器插在我們的桌面上,然後從服務器獲取與驅動器名稱對應的文件夾。
有時,只有一個硬盤驅動器有時會插入倍數,未來可能會增加更多。
每個都安裝到/卷/及其標識符;例如/ Volumes/f00,其中f00是標識符。
我想要發生的情況是掃描卷,看是否有任何驅動器插入,然後檢查服務器以查看文件夾是否存在,是否存在複製文件夾和遞歸文件夾。
這裏是我迄今爲止,它會檢查驅動器捲上存在:
#!/bin/sh
#Declare drives in the array
ARRAY=(foo bar long)
#Get the drives from the array
DRIVES=${#ARRAY[@]}
#Define base dir to check
BaseDir="/Volumes"
#Define shared server fold on local mount points
#I plan to use AFP eventually, but for the sake of ease
#using a local mount.
ServerMount="BigBlue"
#Define folder name for where files are to come from
Dispatch="File-Dispatch"
dir="$BaseDir/${ARRAY[${i}]}"
#Loop through each item in the array and check if exists on /Volumes
for ((i=0;i<$DRIVES;i++));
do
dir="$BaseDir/${ARRAY[${i}]}"
if [ -d "$dir" ]; then
echo "$dir exists, you win."
else
echo "$dir is not attached."
fi
done
我想不出該怎麼辦,是怎麼檢查在循環硬盤安裝點時服務器的卷。
所以我可以做類似:
#!/bin/sh
#Declare drives, and folder location in arrays
ARRAY=(foo bar long)
#Get the drives from the array
DRIVES=${#ARRAY[@]}
#Define base dir to check
BaseDir="/Volumes"
#Define shared server fold on local mount points
ServerMount="BigBlue
#Define folder name for where files are to come from
Dispatch="File-Dispatch"
dir="$BaseDir/${ARRAY[${i}]}"
#List the contents from server directory into array
ARRAY1=($(ls ""$BaseDir"/"$ServerMount"/"$Dispatch""))
SERVERFOLDER=${#ARRAY1[@]}
echo ${list[@]}
for ((i=0;i<$DRIVES;i++)); ((i=0;i<$SERVERFOLDER;i++));
do
dir="$BaseDir/${ARRAY[${i}]}"
ser="${ARRAY1[${i}]}"
if [ "$dir" =~ "$sir" ]; then
cp "$sir" "$dir"
else
echo "$dir is not attached."
fi
done
我知道,這是非常錯誤的...非常好,但我希望它給你什麼,我想實現的想法。
任何想法或建議嗎?
對不起,這些錯誤中的一半來自於我懶惰複製到這裏和編輯時,但謝謝我也會試試這個。我知道((i = 0; i <$ DRIVES; i ++)); ((i = 0; i <$ SERVERFOLDER; i ++));是不正確的,但這是我想要的。 你在上個月幫我解決了一些問題,我非常感謝。 – S1syphus 2010-04-30 15:21:45