Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Двоеточие или не двоеточие?

    Двоеточие или не двоеточие?

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Двоеточие или не двоеточие?, RouterOS
     
    Jotne
    Guest
    #1
    0
    13.05.2020 07:24:00
    Я пишу скрипты для Mikrotik Router OS. Есть ли какая-то причина ставить двоеточие : перед командами? Например, так работает: do {:put "hello"} А так тоже: do {put "hello"} Есть ли смысл использовать один вариант вместо другого?
     
     
     
    rextended
    Guest
    #2
    0
    18.07.2023 23:18:00
    Проблема не в синтаксисе, а в том, как сделать код максимально понятным, даже для других. Например, код из одного из предыдущих постов: { :delay 4s /interface :if (([pppoe-client monitor pppoe-ikev2 as-value once]->“mtu”) < 1500) do={ disable sfp-sfpplus1 :delay 50ms enable sfp-sfpplus1 :log warning “PPPoE MTU lower than 1500, so the SFP port is restarted”} } (исправлено также “mtu”, скорее всего, на самом деле несколько лет назад имелось в виду “actual-mtu”) — не важно, для чего это, я бы написал так: { :delay 4s :local pname “pppoe-ikev2” :local iname “sfp-sfpplus1” /interface :local chkmtu ([pppoe-client monitor $pname once as-value]->“actual-mtu”) :if ($chkmtu < 1500) do={ disable $iname ; :delay 50ms ; enable $iname :log warning “$pname Actual MTU $chkmtu < 1500, so $iname is reloaded” } } И “команда” delay (:delay) лучше, чем “подраздел” задержки (/delay) — хотя они делают одно и то же, с двоеточием всё намного яснее. Ещё одна глупость — ставить ; в конце без причины, или использовать do { } вообще бессмысленно, или усложнять то, что можно сделать проще, например: :put ("the value of " . $varname . " is " . $varvalue . “.”) вместо того, чтобы писать напрямую: :put “the value of $varname is $varvalue.” (обратите внимание: круглые скобки нужны только если строка содержит специальные символы, типа \ $ _ \66 \r \n и т.п.)
     
     
     
    msatter
    Guest
    #3
    0
    27.05.2020 13:43:00
    Я заметил интересное поведение, которое может объяснить использование знака «:».  
    {  
    :delay 4s  
    /interface  
    :if (([pppoe-client monitor pppoe-ikev2 as-value once]->"mtu") < 1500) do={
    disable sfp-sfpplus1  
    :delay 50ms  
    enable sfp-sfpplus1  
    :log warning "PPPoE MTU меньше 1500, поэтому SFP-порт перезапускается"}  
    }  

    На третьей строке я использую /interface, чтобы переключиться на другой «путь», и тогда мне не нужно ставить «:» перед командами в этом «пути». Как только вызываю глобальную команду, приходится использовать «:». Нужно ещё проверить предыдущие скрипты, чтобы понять, изменилось ли что-то в 6.47RC2.  

    Потом я попробовал команду вне OT:  
    /interface> do {put "hello"}  
    bad command name put (line 1 column 5 >do {put "hello"}  
    hello  

    Дело закрыто? Всё работает так, как описано в Wiki.
     
     
     
    Jotne
    Guest
    #4
    0
    27.05.2020 16:46:00
    Я тоже замечал такое поведение. Если вы выполняете много команд в подпапке, можно пропустить указание пути, если сначала задать сам путь. То есть в глобальных командах используйте двоеточие, чтобы разделить, что к чему относится. Вопрос решён.
     
     
     
    berisz
    Guest
    #5
    0
    18.07.2023 11:53:00
    Нет, он не закрыт! /interface> /do {put "hello"} ;  
    hello
     
     
     
    Amm0
    Guest
    #6
    0
    18.07.2023 14:02:00
    Если всё однозначно, то технически двоеточие не нужно. Проблема в том, что это не всегда легко понять. Особенно с командами типа :set для присвоения переменной... если на «верхнем уровне», то работают и set, и :set... но в «командном пути» set может означать установку параметра — тогда нужно использовать двоеточие в :set, чтобы задать именно переменную. Аналогично с :find и find. При этом я сторонник всегда использовать двоеточие для всех команд верхнего уровня — так читать гораздо понятнее, и это может помочь избежать проблем в будущем, ведь в примерах Mikrotik почти везде используют двоеточие.
     
     
     
    berisz
    Guest
    #7
    0
    18.07.2023 17:58:00
    Ни одного двоеточия!  
    /interface list member>  
    /local x 5 ;  
    /put $x ;  
    /set x 7 ;  
    /put $x ;  
    5  
    7
     
     
     
    Amm0
    Guest
    #8
    0
    18.07.2023 18:30:00
    Ты читишь! / должно работать одинаково — проблема именно в простом «set», который вызывает сложности выше. Если ты всё ещё используешь «лишний символ» для устранения неоднозначности, то выбор между / и : — это, скорее, дело личных предпочтений. Двоеточие : выделяет операции по сравнению с командами — но это только мое мнение.
     
     
     
    berisz
    Guest
    #9
    0
    18.07.2023 19:44:00
    Понятно! Единственное, что меня смущает, — это непонятный синтаксис. «/» или «:».
     
     
     
    Amm0
    Guest
    #10
    0
    18.07.2023 20:28:00
    Я человек, который соблюдает правила. В документации [limited] пишут так: — Но в RouterOS есть команда «/console/inspect request=syntax», чтобы проверить такие вещи. Она воспринимает и /, и : как одно и то же: ## используем слэш /

    [amm0@MT] > /console/inspect request=syntax input="/put "

    Колонки: TYPE, SYMBOL, SYMBOL-TYPE, NESTED, NONORM, TEXT  
    TYPE    SYMBOL     SYMBOL-TYPE  N  NON  TEXT  
    syntax             collection   0  yes  
    syntax  <message>  explanation  1  no   строка или любое выражение

    # использование двоеточия :

    [amm0@MT] > /console/inspect request=syntax input=":put " path=ip,address

    Колонки: TYPE, SYMBOL, SYMBOL-TYPE, NESTED, NONORM, TEXT  
    TYPE    SYMBOL     SYMBOL-TYPE  N  NON  TEXT  
    syntax             collection   0  yes  
    syntax  <message>  explanation  1  no   строка или любое выражение

    # использование слэша / с «путём» (/ip/address == ip,address … в /console/inspect)

    [amm0@MT] > /console/inspect request=syntax input="/put " path=ip,address
    Колонки: TYPE, SYMBOL, SYMBOL-TYPE, NESTED, NONORM, TEXT  
    TYPE    SYMBOL     SYMBOL-TYPE  N  NON  TEXT  
    syntax             collection   0  yes  
    syntax  <message>  explanation  1  no   строка или любое выражение

    # НО без / или : — просто «put» без указания пути не работает  
    /console/inspect request=syntax input="put " path=ip  
    Колонки: TYPE, SYMBOL, SYMBOL-TYPE, NESTED, NONORM  
    TYPE    SYMBOL        SYMBOL-TYPE  NESTED  NONORM  
    syntax                collection        0  yes  
    syntax  ..            explanation       1  no  
    syntax  address       explanation       1  no  
    syntax  arp           explanation       1  no  
    syntax  cloud         explanation       1  no  
    syntax  dhcp-client   explanation       1  no  
    [...]
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры