Синтаксис

Автоматизация при помощи встроенного скриптового языка и RouterOS API
kavardo
Сообщения: 21
Зарегистрирован: 21 фев 2017, 14:28

Синтаксис

Сообщение kavardo »

В чем разница в использовании операторов в скриптах с : и без.
Кусок скрипта:

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

:local getRemoteSize do={
    :local identity [/system identity get name]
    :local model [/system resource get board-name]
    :if ($model ~ " ") do={ :set model [pick $model 0 [:find $model " "]] }
    if ([type $mode] != "str") do={ :set $mode "script" }
    :do { :return ([/tool fetch url="any url" as-value output=user] -> "data") } on-error={ :return "Failed to get remote size $file" }
}

Почему один if используется с : , а второй без?

Про

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

/prefix/ - ":" or "/" character which indicates if a command is ICE or path. It may not be required.
я знаю. Интересует в каких случаях "It may not be required".
Аватара пользователя
Chupaka
Сообщения: 4082
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Синтаксис

Сообщение Chupaka »

Я так и не понял из доки, что такое ICE :)

Навскидку, где двоеточие обязательно - например, команда "set":

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

/ip firewall filter

# это меняет параметр правила
set $x dst-port=876

# это меняет значение переменной
:set x "dst-port=876"
Если скриптом будет пользоваться больше одного человека или более нескольких раз - я бы рекомендовал везде ставить двоеточие, дабы не было разночтений.
kavardo
Сообщения: 21
Зарегистрирован: 21 фев 2017, 14:28

Re: Синтаксис

Сообщение kavardo »

Как я понимаю в данном случае ICE означает интерпретатор команд. Как и в других скриптовых языках.

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

/prefix/ - ":" or "/" character which indicates if a command is ICE or path. It may not be required.
И тут двоеточие говорит, что это именно команда. Иначе может быть воспринято как переменная.
Погружаясь в изучение вопроса, не все так однозначно....
Если так ( c : ), то поиск идет по текущему пути ( /ip address get...)

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

/ip address
:ip route print where gateway=[get 0 interface]
А если так, то уже от корня ( /get... )

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

/ip address
/ip route print where gateway=[get 0 interface]
Аватара пользователя
Chupaka
Сообщения: 4082
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Синтаксис

Сообщение Chupaka »

kavardo писал(а): 30 апр 2024, 04:16

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

/ip address
:ip route print where gateway=[get 0 interface]
Ох, такого извращения я вообще ещё не встречал, и слегка удивлён, что оно вообще работает :D
kavardo
Сообщения: 21
Зарегистрирован: 21 фев 2017, 14:28

Re: Синтаксис

Сообщение kavardo »

Такая неоднозначность у них появилась после какой то 4.* версии. Что то переработали, а что то оставили для совместимости со старыми скриптами.
Кто то пишет типа:
Если команды идут в блоке команд - перед каждой командой ставится : (чтобы было понятно, что это блок команд).
Если использовать команды без : - тогда эта команда должна быть встроенной командой RouterOS. If - встроенная команда, поэтому допускается ее использование как с : так и без неё.
Получается просто для визуализации. Правда как то сомнительно, что так читабильней.
Аватара пользователя
Chupaka
Сообщения: 4082
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Синтаксис

Сообщение Chupaka »

> чтобы было понятно, что это блок команд

На официальном форуме никогда такого не встречал.
kavardo
Сообщения: 21
Зарегистрирован: 21 фев 2017, 14:28

Re: Синтаксис

Сообщение kavardo »

Вот в телеге и закусился с одним сертифицированным с кучей M* корочек от Микротика.... :)
Аватара пользователя
Chupaka
Сообщения: 4082
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Синтаксис

Сообщение Chupaka »

Ну, на вкус и цвет все фломастеры разные...