2012-10-23 24 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