現在の時刻を確認し、実行するはずの適切な時刻でない場合はスクリプトを中止する必要があります。また、他の誰かがそれを実行した場合、中止する必要があります。
例:10 PM and and 2 AM(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
の時間比較に関して他の効率的な方法があるかどうか知りたいのですが?
それは私には完璧に見えます。何が改善されるべきだと思いますか?
とにかく、それを改善する方法は次のとおりです:
zsh
やksh93
のような日付機能が組み込まれたシェルを使用するgawk
を使用します(これはbashよりも小さいが、ダッシュよりも小さいですが、余分なフォークを回避できます)。例:
#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}
外部ツールが許可されている場合は、 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
免責事項:私はそのツールの作者です。