2013-11-28 35 views
1

這是我的第一個bash腳本。如果有報警,報警繼電器狀態檢查併發郵件一次

我有報警繼電器,我想用cron每2分鐘檢查一次繼電器狀態,如果它是「1」,那麼只發送一次電子郵件警告。如果繼電器爲「1」,則必須手動重置繼電器,並且不要每隔2分鐘發送一次電子郵件。

它的工作原理,但有什麼我可以改善或做更好的方式嗎?

#!/bin/bash  
lockfile=/tmp/MLP_alarm.lock 
alarm_state=$(/home/talo/bin/MLP_alarm_relay_state.py) 

if [ $alarm_state = 0 -a -f $lockfile ] 
then 
    rm $lockfile 
    echo "Alarm reset and lockfile removed" 
    exit 1 
elif [ $alarm_state = 0 -a ! -f $lockfile ] 
then 
    echo "Everything OK!" 
    exit 1 
elif [ $alarm_state = 1 -a ! -f $lockfile ] 
then 
    touch $lockfile 
    echo 「Alarm detected」 | mail -s 「ALARM !!!」 [email protected] 
    echo "email sent" 
    exit 1 
elif [ $alarm_state = 1 -a -f $lockfile ] 
then 
    echo "Email sent earlier" 
    exit 1 
else 
    echo "Something went wrong!!!" 
    exit 1 
fi 

回答

1
  1. [ $alarm_state = 0 -a -f $lockfile ]
    是perfectlty不錯,但它正式勸編寫爲
    [ "$alarm_state" = "0" ] && [ -f "$lockfile" ]
    因爲-a選項可以在某些情況下,模棱兩可。

  2. 試着使用雙引號將所有變量(以'$'開頭的所有變量)封裝起來。它會爲你節省一些頭痛的問題(比如:帶空格的文件名等)。

其餘的看起來很完美,這裏沒有任何東西需要優化。 :-)