2010-05-24 105 views
5

說我想要一個bash腳本的某個塊,只有在上午8點(8:00)和下午5點(17:00)之間執行,否則什麼也不做。腳本不斷運行。比較時間使用日期命令

到目前爲止,我正在使用date命令。

如何使用它來比較它的時間範圍?

回答

8

只是檢查當天的當前時間是8和5之間 - 因爲你使用的輪數,你甚至不必渣土周圍分鐘:

hour=$(date +%H) 
if [ "$hour" -lt 17 -a "$hour" -ge 8 ]; then 
    # do stuff 
fi 

當然,這8:00:00爲真,5:00:00爲假;希望這不是什麼大不了的事情。

對於更復雜的時間範圍內,更簡單的方法可能是轉換回UNIX時間,你可以更容易地比較:

begin=$(date --date="8:00" +%s) 
end=$(date --date="17:00" +%s) 
now=$(date +%s) 
# if you want to use a given time instead of the current time, use 
# $(date --date=$some_time +%s) 

if [ "$begin" -le "$now" -a "$now" -le "$end" ]; then 
    # do stuff 
fi 

當然,我已經回答了一個問題,問的錯誤。正如巨人所暗示的那樣,你可以使用一個cron工作 - 它可以在8開始服務,並且在5之後,或者在預期的時間間隔運行它。

+0

不應該這是結束= $(日期--date = 「17」 +%S)? – vehomzzz 2010-05-24 18:49:55

+0

@Andrei:當然。對不起,在第一個例子中,至少...... – Cascabel 2010-05-24 19:06:23

1

爲什麼不使用cron作業?

否則

if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then 
    do_stuff() 
fi 

將做的工作

+0

在這種情況下你會如何使用cron作業? – vehomzzz 2010-05-24 18:23:52

+0

cron作業的問題在於,它會在指定的時間或指定的時間內啓動作業,並且可以定期執行作業,但如果作業在一段時間結束後仍在運行,那麼它就沒有辦法結束作業。所以,對於某些用途,日期比較方法更好。 – 2010-05-24 18:35:26