Сравните время с помощью команды даты - PullRequest
5 голосов
/ 24 мая 2010

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

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

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

Ответы [ 2 ]

11 голосов
/ 24 мая 2010

Просто проверьте, находится ли текущий час дня между 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, или просто запустить в ожидаемое время между.

1 голос
/ 24 мая 2010

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

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

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

сделает работу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...