Код работает в терминале, но не работает как скрипт

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Закрыто
LuckyMC
Сообщения: 5
Зарегистрирован: 31 мар 2020, 19:40

Имеется скрипт выуживания событий из файла log:

:global CodeCount [:len [/log/find where message~"CodeCount"]];
:if ($State < $CodeCount) do={:put "lalalla"}; :global State $CodeCount

Если вводить этот код в терминале, то он работает как надо;
Но если заворачивать это в скрипт, то "lalalla" выдаётся всегда, вне зависимости от результата сравнения переменных $State и $CodeCount, в чём может быть проблема?


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

С таким синтаксисом, видимо на РОС 7 работаете. Мне более привычно старое:

Код: Выделить всё

:global CodeCount [:len [/log find where message~"CodeCount"]];
:if ($State < $CodeCount) do={:put "lalalla"}; :global State $CodeCount
Скорее всего сравнение :if ($State < $CodeCount) некорректно по сути, так как в $CodeCount Вы должны получить внутренние идентификаторы строк лога, где скрипт найдет искомый текст.

Вероятно нужно как то так:

:global CodeCount [/log/find where message~"lte"];
:if ([:len $State] < [:len $CodeCount]) do={:log info "lalalla"};
:global State $CodeCount


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

От куда скрипт должен знать, что такое переменная $State? Особенно в первый запуск скрипта.


LuckyMC
Сообщения: 5
Зарегистрирован: 31 мар 2020, 19:40

Sertik писал(а): 21 янв 2022, 21:39 С таким синтаксисом, видимо на РОС 7 работаете. Мне более привычно старое:

Код: Выделить всё

:global CodeCount [:len [/log find where message~"CodeCount"]];
:if ($State < $CodeCount) do={:put "lalalla"}; :global State $CodeCount
Скорее всего сравнение :if ($State < $CodeCount) некорректно по сути, так как в $CodeCount Вы должны получить внутренние идентификаторы строк лога, где скрипт найдет искомый текст.

Вероятно нужно как то так:

:global CodeCount [/log/find where message~"lte"];
:if ([:len $State] < [:len $CodeCount]) do={:log info "lalalla"};
:global State $CodeCount
Попробовал Ваш код, та же проблема, ничего не поменялось, но спасибо

Да, версия RouterOS 7.1.1
Последний раз редактировалось LuckyMC 22 янв 2022, 10:50, всего редактировалось 1 раз.


LuckyMC
Сообщения: 5
Зарегистрирован: 31 мар 2020, 19:40

pepelxl писал(а): 22 янв 2022, 08:31 От куда скрипт должен знать, что такое переменная $State? Особенно в первый запуск скрипта.
Пока я её глобально задаю руками в терминале с каким-нибудь значение при загрузке роутера, в будущем оптимизирую это

Но Вы правы, в рамках скрипта это не работает, разобрался, можно закрыть тему, спасибо!


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

От куда скрипт должен знать, что такое переменная $State? Особенно в первый запуск скрипта.
Конечно и с этим абсолютно согласен.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Закрыто