Scripting

如何檢查目前時間是否在 23:00 和 06:30 之間

  • July 18, 2020

如果目前時間在 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將按字典順序排列,因此您可以直接將它們作為字元串進行比較。
  • 避免使用-aor -oin[ ],使用||and&&代替。
  • 由於這是 bash,prefer [[ ]]over [ ],它讓生活更輕鬆。

引用自:https://unix.stackexchange.com/questions/395933