Нам необходимо написать скрипт, который будет проверять текущее время и выполнять различные действия в зависимости от заданных условий.
Допустим, нам нужен скрипт, который должен выполнять определённые действия с 00 до 08 часов.
Рис.1. Mikrotik Routerboard, извлекаем данные о времени.
Извлекаем данные о текущем времени:
:local a [/sys clock get time]; :put $a;
Рис.2. Mikrotik Routerboard, извлекаем первый символ из строки.
Для того, чтобы скрипт работал, необходимо проверить, попадает ли текущее время в диапазон от 0 до 8. Для этого нужно из всей строки извлечь часы и выполнить проверку.
При этом необходимо помнить об одном нюансе. Если текущее время составляет, к примеру, 11 часов, то проверка будет выполнена (0>=11). Но если текущее время будет 00, то (0>=00) не даст ожидаемого результата. Поэтому:
Рис.3. Mikrotik Routerboard, проверка на наличие нуля в начале числа.
Чтобы избавится от нуля в начале числа, в переменную b извлекаем первый символ из переменной а. Затем выполняем проверку: равна ли переменная b нулю. Если равна, то в переменную b извлекаем только второй символ из переменной а. Если нет, то извлекаем первый и второй символ.
Рис.4. Mikrotik Routerboard, второй вариант проверки на наличие нуля в начале числа.
Рис.5. Mikrotik Routerboard, проверяем работу скрипта.
Извлекаем данные о текущем времени в переменную а:
:local a [/sys clock get time];
В переменную b извлекаем первый символ из переменной а:
:local b {[pick $a 0]};
Выполняем проверку: равна переменная b нулю или нет. Если равна, то в переменную b извлекаем второй символ из переменной а. Если не равна, то в переменную b извлекаем первый и второй символ из переменной а:
:if ($b=0) do={:set b [:pick $a 1]} else={:set b [:pick $a 0 2]};
Выполняем вторую проверку - с двойным условием. Если b больше или равна нулю и при этом меньше или равна 8, то выполняем заданные действия. Если условие не выполняется, то, соответственно, и эти действия не выполнять:
:if ($b>=0 and $b<=8) do={:put "run"} else={:put "no run";}
Рис.6. Проверяем работу скрипта - условие выполняется.
Окончательный вариант скрипта:
:local a [/sys clock get time]; :put $a; :local b {[pick $a 0]}; :if ($b=0) do={:set b [:pick $a 1]} else={:set b [:pick $a 0 2]}; :put $b; :if ($b>=0 and $b<=8) do={:put "run"} else={:put "no run";}
Евгений Рудченко специально для ASP24.






