Scripting
如何檢查目前時間是否在 23:00 和 06:30 之間
如果目前時間在 23:00 到 06:30 之間,我無法掌握如何從 bash 腳本中正確檢查。我正在嘗試執行一個無限循環來檢查現在的時間,如果時間範圍在晚上 11 點到早上 6:30 之間,我會做一些事情。這是我到目前為止寫的,第二天就不行了:
fireup() { local starttime=$(date --date="23:00" +"%s") local endtime=$(date --date="06:30" +"%s") while :; do local currenttime=$(date +%s) if [ "$currenttime" -ge "$starttime" -a "$currenttime" -ge "$endtime" ]; then do_something else do_something_else fi test "$?" -gt 128 && break local currenttime=$(date +%s) done & }
我做錯了什麼?
如果您只需要檢查是否
HH:MM
在 23:00 和 06:30 之間,則不要使用 Unix 時間戳。只需HH:MM
直接檢查值:fireup() { while :; do currenttime=$(date +%H:%M) if [[ "$currenttime" > "23:00" ]] || [[ "$currenttime" < "06:30" ]]; then do_something else do_something_else fi test "$?" -gt 128 && break done & }
筆記:
- 時間
HH:MM
將按字典順序排列,因此您可以直接將它們作為字元串進行比較。- 避免使用
-a
or-o
in[ ]
,使用||
and&&
代替。- 由於這是 bash,prefer
[[ ]]
over[ ]
,它讓生活更輕鬆。