Статья посвящена написанию скрипта, который будет проверять текущее число месяца и, в зависимости от заданных условий, выполнять или нет указанные действия.
Рис.1. Mikrotik Routerboard, извлекаем текущую дату.
Получаем текущую дату и заносим в переменную а:
:local a [/sys clock get date]; :put $a;
Рис.2. Mikrotik Routerboard, определяем тип переменной а.
Так как переменная а - строка, то каждый символ выступает под своим порядковым номером. Это значит, что можно извлекать отдельные символы из строки. Нумерация начинается с нуля.
Рис.3. Mikrotik Routerboard, функция pick.
При помощи функции pick извлечем число из переменной a и поместим в переменную b.
:local b [:pick $a begin=4 end=6];
Аргумент begin указывает на начальный символ, который нужно извлечь, а аргумент end - на конечный символ, не включая его в выбор.
Рис.4. Mikrotik Routerboard, функция pick, сокращенный вариант.
Сокращенный вариант предыдущей команды.
:local b [:pick $a 4 6];
Указываем только порядковые номера, слова begin и end не указываем.
Рис.5. Mikrotik Routerboard, первое число.
Следующим шагом было бы добавление условного оператора if. Но если текущим числом месяца окажется первое число, то в результате извлечения данных мы получим значение 01.
Рис.6. Mikrotik Routerboard, оператор if.
Поскольку текущий день месяца получил значение 01, условие $b=1 не сможет выполняться, поэтому работа скрипта будет отличаться от ожидаемой.
Рис.7. Mikrotik Routerboard, сложение извлеченных данных.
Поступим следующим образом. Число состоит из двух символов, поэтому в переменную b следует занести результат суммы двух извлеченных символов:
([pick $a 4]+[pick $a 5]);
В результате сложения (0+1) получим 1.
Рис.8. Mikrotik Routerboard, рабочий скрипт.
Окончательный вариант скрипта выглядит следующим образом:
:local a [/sys clock get date]; :put $a; :local b ([pick $a 4]+[pick $a 5]); :if ($b=3) do={:put "run";} else={:put "No run";}
Евгений Рудченко специально для ASP24.








