日付文字列を確認し、1時間以上経過したことを確認してください。

日付文字列を確認し、1時間以上経過したことを確認してください。

日付に基づいてIPを一覧表示するスクリプトがあります。TIMENOW=$(date +"%m-%d-%Y-%H:%M")

マイファイルに移動/root/deny.conf

deny xxx.xxx.xxx.xxx; # 03-03-2021-16:43

deny.confしかし、最後の行を取り出して最後のIPを追加してから1時間以上経過したかどうかを確認する方法を知りたいです。

たとえば、日付が現在03-03-2021-17:43または後で、最後にリストされた行のdeny.conf値がdeny xxx.xxx.xxx.xxx; # 03-03-2021-16:43trueの場合、呼び出された別の行をbashします。/root/pass.sh

ベストアンサー1

+'%Y-%m-%d %H:%M'最も簡単な方法は、簡単な計算と比較を実行できるさまざまなタイムスタンプを使用することです。たとえば、

date -d '2018-11-24 23:09 +1 hour' +'%Y-%m-%d %H:%M'

与えられた2018-11-25 00:09

dateまた、時間開始(1970-01-01 00:00:00 UTC)以降の秒数に変換するためにも使用できます。もちろん1時間は3600秒です。

タイムスタンプを変更したくない場合は、許可されたものにdate変換する必要があります。たとえば、次のようになります。

timestamp='11-22-2021-16:43'
datepart=${timestamp%-*}
month=${datepart%%-*}
# etcetera

編集:あなたのコメントは、上記のヒントよりも多くの情報が必要であることを示唆しています。

以下を使用して、ファイルから最後の日付を取得できます。

timestamp=$(grep deny /root/deny.conf | tail -1 | sed 's/.*# *//')

EPOCH以降の秒単位で変換できます。

sects=$(date -d "$timestamp" '+%s')

現在のタイムスタンプ:

now=$(date +%s)

それから

if [ $((sects+3600)) -le $now ] ; then
    echo "Long ago, in history almost forgotten"
else
    echo "Quite recent"
fi

文字列比較を実行し、正しい日付形式を使用しても機能します。

timestamp=$(grep deny /root/deny.conf | tail -1 | sed 's/.*# *//')
hourago=$(date -d '1 hour ago') +'%Y-%m-%d %H:%M'
if [ "$timestamp" > "$hourago" ] ; then
    echo "It just happened!"
else
    echo "Ancient history"
fi

おすすめ記事