以下是日常報告腳本中的一個片段,用於檢查磁盤的SMART狀態。在'else'中清除正確的值
但是,我希望將$ STATUS的全部值打印在'else'子句中,但是現在將它截斷爲僅第一個單詞($ 3)。
我該如何克服這個問題?
echo "SMART STATUS" >> $LOGS
echo "--------------------------" >> $LOGS
DISKS=(0 1 2 3 4 5 6 7)
for i in "${DISKS[@]}" ;
do
STATUS=`diskutil info /dev/disk$i | grep SMART | awk '{ print $3 }'`
if [ "$STATUS" = "Verified" ]; then
echo "SMART STATUS OK FOR DISK $i" >> $LOGS
else
echo "** SMART STATUS $STATUS FOR DISK $i **" >> $LOGS
fi
done
echo " " >> $LOGS
echo " " >> $LOGS
例如:
$ diskutil info /dev/disk8 | grep SMART
SMART Status: Not Supported
$ diskutil info /dev/disk2 | grep SMART
SMART Status: Verified
理想的劇本要重申 「不支持」 像disk8情況。我認爲「SMART Status:」的值在一個字和幾個字之間可能會有所不同。我沒有在手冊頁上看到所有的可能性,所以我沒有明確的答案。
而不是做的''回聲等等等等>> $ LOGS''考慮包裝所有的代碼在''{... ALL-YOUR-CODE ...} >> $ LOGS 2>&1''然後你可以刪除所有''>> $ LOGS'',那麼所有到stdout和stderr的東西都會被記錄在日誌中。 – sotapme 2013-02-10 19:47:34