現在時刻が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:MM
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
-o
または[ ]
、使用||
および&&
取り替え。 - bashだから
[[ ]]
好みます[ ]
。人生が楽になります。