現在時刻が23:00から06:30の間であることを確認する方法

現在時刻が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 &
 }

私は何が間違っていましたか?

ベストアンサー1

必要なものが23:00から06:30の間であることを確認するだけであれば、HH:MMUnixタイムスタンプを使用しないでください。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-oまたは[ ]、使用||および&&取り替え。
  • bashだから[[ ]]好みます[ ]。人生が楽になります。

おすすめ記事