時間を比較する良い方法は何ですか?

時間を比較する良い方法は何ですか?

現在の時刻を確認してスクリプトを実行するのに正確な時間でない場合は、スクリプトを中断する必要があります。また、他の人が実行したら中断する必要があります。

例: 午後 10 時から午前 2 時 (4 時間ウィンドウ) の間に開始する場合にのみ、スクリプトを実行する必要があります。

現在私は次のことをしています。date +%k%Mハードコードされた数字と比較するのに時間を費やしてください

#!/bin/sh
currTime=`date +%k%M`
check_time_to_run()
{
    tempTime=$1
    if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then 
        echo "Time is between 2 AM and 10 PM. Aborting."
        exit 1
    else
        echo "Time is after 10 PM and before 2 AM. Running normally."
    fi
}

check_time_to_run $currentTime

shORの時間比較を実行する他の効率的な方法があるかどうかを知りたいですbash

答え1

これは私にとって完璧に見えます。改善すべきだと思うのはなぜですか?

とにかく改善されたアプローチは次のとおりです。

  • dashやpdkshなど、bashよりも小さく高速なシェルを使用してください。
  • zshまたは、同じ組み込み日付関数を持つシェルを使用してください。ksh93
  • 使用gawk(bashより小さいがダッシュより小さいが、追加のフォークを避けることができる):

例:

#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}

答え2

外部ツールが許可されていることを確認したい場合があります。dateutils

あなたの「スクリプト」は次のとおりです。

if dtest time --gt '02:00:00' && dtest time --lt '22:00:00'; then
    echo "Time is between 2 AM and 10 PM. Aborting."
fi

免責事項:私はこのツールの作成者です。

関連情報