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


10

現在の時刻を確認し、実行するはずの適切な時刻でない場合はスクリプトを中止する必要があります。また、他の誰かがそれを実行した場合、中止する必要があります。

例:午後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

shまたはの時間比較に関して他に効率的な方法があるかどうか知りたいのですがbash


1
2つの日付を比較する必要がある場合は、それらをMJDまたはUNIX時間に変換してみてくださいdate +%s。次に例を示します。
Eddy_Em 2013

1
@エディいいえ、それは日付ではありません、それは私が比較する必要がある時間です。
2013

1
私は、数秒でそれが良くなると思います:currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then
Eddy_Em

スクリプトをcrontabに入れませんか?このようにして、特定の時間に実行されるようにします
BitsOfNix

1
どのユーザーもを使用してプロセスの時間を変更できるため、faketimeスクリプトは安全ではありません。ロックファイルを使用することはおそらくより良いオプションです。
jofel 2013

回答:


6

それは私には完璧に見えます。何が改善されるべきだと思いますか?

とにかく、それを改善する方法は次のとおりです:

  • ダッシュやpdkshのようなbashよりも小さくて速いシェルを使用してください。
  • zshまたはのような組み込みの日付機能を持つシェルを使用するksh93
  • 使用gawk(これはbashよりも小さいが、ダッシュよりは小さいが、余分なフォークを回避できる):

例:

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

うんいいね。私がやっていることが粗雑でも悪でもないことを確認したかっただけです。提案をありがとう。
2013

4

外部ツールが許可されている場合は、チェックすることをお勧めし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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.