Как получить конкретные даты и время в функции IF в скрипте bash - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь получить конкретные даты и время, чтобы получить три разных результата из кода ниже. Иногда не работает правильно, поэтому это было сделано, вероятно, неправильно.

#!/bin/bash
currentdate=6
currenttime=17
if [[ ${currentdate#0} -ge  5 ]] && [[ ${currenttime#0} -ge 18 ]] && [[ ${currentdate#0} -le 7 ]] && [[ ${currenttime#0} -le 22 ]]
then
echo "command for Friday after 18pm until Sunday 22pm"
elif [[ ${currentdate#0} -eq 3 ]] && [[ ${currenttime#0} -ge 18 ]] && [[ ${currenttime#0} -le 20 ]]
then
echo "command for Wednesday after 18pm until 20pm"
else
echo "command for all other dates and times"
fi

Произошла логическая ошибка в моей функции. Работал, изменив его на:

if [[ ${currentdate#0} -ge  5 ]] && [[ ${currenttime#0} -ge 18 ]] || [[ ${currentdate#0} -eq  6 ]] || [[ ${currentdate#0} -le 7 ]] && [[ ${currenttime#0} -le 22 ]]

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете объединить число дня и часа в одно число и сравнить его в целом. При таком подходе вы можете определить любой временной диапазон по своему усмотрению.

Использование только одной команды даты вместо двух позволяет избежать возможных неправильных результатов, когда первая вызывается в 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 в этом сценарии всегда будет печатать Трехзначное число без пробелов, поэтому скрипт работает без кавычек.
Некоторые люди любят использовать фигурные скобки со всеми переменными расширениями, некоторые нет, поэтому здесь дело вкуса.

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