2012-10-23 23 views
3

好吧我有一個8 HDD的塔,我試圖做一個腳本,將通過他們循環,併爲每個硬盤在自己的文件夾中的結果(從hdparm信息)的文本文件。我現在怎麼循環這個腳本去sdc->/Bay2,sdd - >/Bay3,sde - >/Bay4等ectBASH Loop如何去做呢?

這是現在工作的一個硬盤只需要循環它爲其他7

if [ -c /dev/sdb ]; 
then 
sudo hdparm -I /dev/sdb >> /Bay1/sdb.txt 
fi 

回答

4

這依賴於水珠匹配/dev/sdX和命令seq以生成1..8:

hd=(dummy /dev/sd[b-z]) 

for i in `seq 1 8` 
do 
    sudo hdparm -I ${hd[$i]} >> /Bay$i/`basename ${hd[$i]}`.txt 
done 

hd數組中的條目dummy只使得一個爲主。

你可以重組它在/dev/sd[b-z]操作(讓它匹配任何號碼,沒想到8),並在@桑普森臣的回答與for sd in /dev/sd[b-z] ...

2
# start with lower case b, so ascii starts at 98 instead of 65 
    ascii=66 
    index=1 
    total=8 
    while [[ $total -ge $index ]] 
    do 
     letter=$(echo "$ascii" | awk '{ printf("%c",$0); }') 
     if [ -c /dev/sd$letter ]; 
     then 
      sudo hdparm -I /dev/sd$letter >> /Bay$index/sd$letter.txt 
     fi 
     index=$((index+1)) 
     ascii=$((ascii+1)) 
    done 

編輯:固定的總/指數錯位和偏移(98)爲小寫字母

touch只是測試它來創建Linux上的文件和它的作品。

+0

缺少''上$ total'等 –

+0

@BenJackson $'計數接得好!艱難的習慣來解決。 –

+0

if語句不應該在'while'循環中,並且基於'/ dev/sd $ letter'而不是'/ dev/sdb'? – ruakh