Вы можете объединить число дня и часа в одно число и сравнить его в целом. При таком подходе вы можете определить любой временной диапазон по своему усмотрению.
Использование только одной команды даты вместо двух позволяет избежать возможных неправильных результатов, когда первая вызывается в 23:59, а вторая в 0:00 следующего дня.
Час, напечатанный в формате %H
, состоит из двух цифр (00..23), поэтому вы всегда получите число из 3 цифр. Неважно, что час считается только до 23. Текущий день с часом 23 будет меньше, чем следующий день с часом 00. Формат дня недели %u
печатает число в диапазоне (1 .. 7), поэтому итоговое число не будет иметь начального 0.
daytime=$(date +%u%H)
if [ "${daytime}" -ge 518 ] && [ "${daytime}" -le 722 ]
then
echo "command for Friday after 18pm until Sunday 22pm"
elif [ "${daytime}" -ge 318 ] && [ "${daytime}" -le 320 ]
then
echo "command for Wednesday after 18pm until 20pm"
else
echo "command for all other dates and times"
fi
Примечание. Сценарий основан на оригинальном сценарии вопроса. Я не изменил все, что можно улучшить.
Вместо "${daytime}"
вы также можете использовать "$daytime"
, $daytime
или ${daytime}
в данном конкретном случае. Кавычки помогут получить лучшее сообщение об ошибке, если произошла ошибка с присвоением результата date
daytime
, что привело к неверному или пустому значению daytime
Команда date в этом сценарии всегда будет печатать Трехзначное число без пробелов, поэтому скрипт работает без кавычек.
Некоторые люди любят использовать фигурные скобки со всеми переменными расширениями, некоторые нет, поэтому здесь дело вкуса.