Страница 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? Особенно в первый запуск скрипта.
Конечно и с этим абсолютно согласен.