Керівництво з написання скриптів до mikrotik routeros

1. КЕРІВНИЦТВО ПО мова скриптів

Це керівництво є введенням в потужний вбудований мова скриптів для RouterOS.

Скриптова мова routeros надає можливість для автоматизації завдань засобами виконання певних ползователей скриптів, пов'язаних з будь-якими подіями.

Скрипти можуть можуть зберігатися в репозиторії (сховище) або можуть бути написані прямо в консолі. Події, що викликають виконання скриптів генеруються системним планувальником, утилітою моніторингу трафіку і утилітою netwatch, але не обмежені лише цими генераторами.

1.1 СТРУКТУРА КОМАНДИ

Скрипти для RouterOS складаються з команд. Команди виконуються одна за однією, поки не буде досягнутий кінець скрипта або не виникне помилка під час виконання.

Консоль використовує наступний синтаксис команди:

[Prefix] [path] command [uparam] [param = [value]. param = [value]]

[Prefix] - може набувати таких символьні значення, ":" або "/", що визначає команду, як ICE або шлях.
[Path] - відносний шлях до бажаного рівня меню.
command - одна з можливих вбудованих команд, визначених рівнем меню.
[Uparam] - безіменний параметр, кіт. повинен бути визначений, якщо цього вимагає вбудована команда (command).
[Params] - послідовність ім'ям параметрів зі значеннями.

* Все, що перераховано в квадратних дужках є необов'язковими складовими частинами команди.

Кожна команда закінчується символом ";" або кінцем рядка. У деяких випадках ці символи не потрібні для закінчення команди. Команда всередині (), [] або <> не потребує таких символах.

Кожна команда всередині іншої команди починається і закінчується квадратними дужками [] (об'єднання команд):

put [/ ip route get [find gateway = 1.1.1.1]];

Команда може складатися з декількох рядків, об'єднаних спеціальним символом. Дивись "Об'єднання команд".

* Команда і EOL (End of Line) *

Команда - це послідовність символів, що закінчуються EOL послідовністю. Будь-яка зі стандартних послідовностей EOL може бути використана:

- Unix = ASCII LF
- Windows = ASCII CR LF
- Mac = ASCII CR

if ($ a = true \
and $ b = false) do =<:put “$a $b”;>
: If ($ a = true \ # невдала спроба
and $ b = false) do =<:put “$a $b”;>
# Comment \
continued - invalid (синтаксична помилка)

* Прогалини між токенами *

Прогалини використовуються для поділу токенов. Пропуск необхідний між двома токенами тільки якщо їх об'єднання може бути інтерпретовано, як інший токен. приклад:

<
: Local a true; : Local b false;
# Прогалини не потрібні
: Put (ab);
# Прогалини потрібні
: Put (a and b);
>

Пропуски не дозволені в наступних конструкціях:

- =
- from =, to =, step =, in =, do =, else =

# Неправильно:
: For i from = 1 to = 2 do = <:put $i>
# Правильно:
: For i from = 1 to = 2 do =<:put $i>
: For i from = 1 to = 2 do =<:put $i>

# неправильно
/ Ip route add gateway = 3.3.3.3
# правильно
/ Ip route add gateway = 3.3.3.3

Глобальний контекст, інакше коренева область, видимості є областю за замовчуванням для скрипта. Вона створюється автоматично і існує завжди.

Користувач може визначити свої області видимості за допомогою дужок <>. Такі області називаються локальними. приклад:

: Local a 3;
: Local b 4;
: Put ($ a + $ b);
>
# Команда нижче некоректна, оскільки змінна b не визначена в даній області видимості
: Put ($ a + $ b);
>

Важливе зауваження: кожна команда в консолі обробляється в своїй локальній області видимості.

[Admin @ MikroTik]>: local myVar a;
[Admin @ MikroTik]>: put $ myVar
syntax error (line 1 column 7)

Важливо: чи не визначайте глобальні змінні всередині локальних областей видимості.

1.2 зарезервованих слів

Наступні слова є зарезервованими і не можуть бути використані, як імена змінних або функцій: