今天我要寫一個Script可以去判斷3顆硬碟的sata速度是否為6.0 Gbps,目前已知Linux底下讀sata硬碟速度的device位置分別為(每台電腦的/sys/class/ata_link/link7/sata_spd 紅字部分會不相同):
HDD1 ===> /sys/class/ata_link/link7/sata_spd
HDD2 ===> /sys/class/ata_link/link8/sata_spd
HDD3 ===> /sys/class/ata_link/link9/sata_spd
完整script寫法,動態變數的方法,如下方粗體字部分:
=================== check_sata_speed.sh ==================
#!/bin/sh
HDD1="7"
HDD2="8"
HDD3="9"
BAY_3=3
i=1
HDDSPD1=`cat /sys/class/ata_link/link$HDD1/sata_spd | awk -F' ' '{print $1}'`
HDDSPD2=`cat /sys/class/ata_link/link$HDD2/sata_spd | awk -F' ' '{print $1}'`
HDDSPD3=`cat /sys/class/ata_link/link$HDD3/sata_spd | awk -F' ' '{print $1}'`
while [ $i -le $BAY_3 ]
do
eval "HDD_SPD=\$HDDSPD$i"
if [ "6.0" == "$HDD_SPD" ]; then
count=$(($count+1))
else
echo "HDD$i Fail"
fi
i=$(($i+1))
done
if [ $count == $BAY_3 ]; then
echo "OK"
fi
=========================================================
如果三顆硬碟都為6.0 Gbps 則最後印出 OK
若是有低於6.0的速度,則會印出Fail
***注意動態變數的使用限制
上面的HDDSPD1~HDDSPD3變數,若是你宣告為 HDD1_SPD ~ HDD3_SPD,則在迴圈內使用(eval "HDD_SPD=\$HDD$i_SPD")動態變數時,是不會成功的,只有把動態變數的數字放在變數名稱最後,才會work
已上~
沒有留言:
張貼留言