Сравните время с помощью команды даты

Скажите, что я хочу определенный блок сценария удара, выполняемого, только если это между 8:00 (8:00) и 17:00 (17:00), и ничего не сделайте иначе. Сценарий работает непрерывно.

До сих пор я использую date команда.

Как использовать его для сравнения его с диапазоном времени?

5
задан T Zengerink 25 September 2012 в 08:37
поделиться

2 ответа

Просто проверьте, находится ли текущий час дня между 8 и 5 - поскольку вы используете круглые числа, вам даже не придется копаться в минутах:

hour=$(date +%H)
if [ "$hour" -lt 17 -a "$hour" -ge 8 ]; then
    # do stuff
fi

Конечно , это верно в 8:00:00, но неверно в 5:00:00; надеюсь, это не имеет большого значения.

Для более сложных временных диапазонов более простым подходом могло бы быть преобразование обратно в unix-время, где вы можете легче сравнивать:

begin=$(date --date="8:00" +%s)
end=$(date --date="17:00" +%s)
now=$(date +%s)
# if you want to use a given time instead of the current time, use
# $(date --date=$some_time +%s)

if [ "$begin" -le "$now" -a "$now" -le "$end" ]; then
    # do stuff
fi

Конечно, я сделал ошибку, отвечая на вопрос, как задан. Как предлагает Шеймус, вы можете просто использовать задание cron - оно может запустить службу в 8 и отключить ее в 5 или просто запустить ее в ожидаемое время между ними.

12
ответ дан 18 December 2019 в 14:42
поделиться

Почему бы просто не использовать задание cron?

В противном случае

if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then
    do_stuff()
fi

выполнит задание

1
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: