現在の時刻を確認してスクリプトを実行するのに正確な時間でない場合は、スクリプトを中断する必要があります。また、他の人が実行したら中断する必要があります。
例: 午後 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
ORの時間比較を実行する他の効率的な方法があるかどうかを知りたいです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
免責事項:私はこのツールの作成者です。