Страница 1 из 1

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

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

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

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

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

Добавлено: 21 янв 2022, 21:39
Sertik
С таким синтаксисом, видимо на РОС 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

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

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

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

Добавлено: 22 янв 2022, 10:48
LuckyMC
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

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

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

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

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

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