Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • 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
     
    lukkes
    Guest
    #1
    0
    28.05.2010 18:48:00
    Всем привет! Я пишу скрипт, который пингует больше трёх хостов: если первый не отвечает, пингуем второй, и так далее. Но если какой-то хост ответил, то цикл должен тут же прерваться и не пинговать остальные сервера. В языке MikroTik есть команда break или exit, которая может это сделать? Мне нужно как-то прервать цикл сразу, когда один из хостов ответит на пинг. Спасибо!

    *****

    Этот вариант работает, но может у кого-то есть другая идея...?

    *****

    :local continue true;
    :local counter 0;
    :while ($continue) do={
      :log info $continue
      :set counter ($counter + 1);
      :log info $counter;
      :if ($counter=50) do={:set continue false;}
    }
    :log info "end"
     
     
     
    hackclub
    Guest
    #2
    0
    27.02.2018 19:41:00
    +1 Спасибо…
     
     
     
    thantoldo
    Guest
    #3
    0
    10.06.2013 07:59:00
    Есть планы добавить «break» или «exit» для циклов в скриптах RouterOS?
     
     
     
    webpagetech
    Guest
    #4
    0
    06.11.2013 03:52:00
    +1 Это было бы полезно... Цикл while continue сработает, если хотите прервать в конце цикла while, но чтобы цикл действительно остановился, выполнение должно вернуться к строке «:while ($continue) do={». Это значит, что если вы установите continue в false где-то в середине цикла while, остальная часть цикла все равно выполнится. Решение — обернуть каждое выражение внутри цикла while в блок «:if ($continue = true) do={». Если цикл большой, это добавляет кучу лишнего кода только ради одного break;. Спасибо команде Mikrotik за работу над версией 6.2, благодаря которой функции стали намного чище. Скрипты теперь делать стало немного веселее.
     
     
     
    juliokato
    Guest
    #5
    0
    10.04.2017 18:22:00
    Плюс один.
     
     
     
    glee
    Guest
    #6
    0
    18.08.2017 14:51:00
    Я нашёл один вариант решения — использовать error, это остановит скрипт. Вики: error :error Генерирует ошибку в консоли и прекращает выполнение скрипта.
     
     
     
    Bdaisnub
    Guest
    #7
    0
    14.02.2018 15:22:00
    Спасибо!
     
     
     
    yesurbius
    Guest
    #8
    0
    25.05.2018 16:41:00
    Я не совсем понимаю, как использовать цикл «while ($continue)» так же, как foreach. Я пытаюсь добавить правило перед первым действием drop в фильтрах... может, есть способ получше сделать это...

    foreach filterrule in [/ip firewall filter find where action=drop] do={
       /ip firewall filter add action=accept chain=input comments=“Remote Administration” dst-port=8291 protocol=tcp src-address-list=REMOTE_Admin break
    }

    Конечно, это не работает…
     
     
     
    yesurbius
    Guest
    #9
    0
    25.05.2018 16:47:00
    Неважно... Я нашёл альтернативный способ с помощью place-before и :pick/:find:

    /ip firewall filter add action=accept chain=input comments="Remote Administration" dst-port=8291 protocol=tcp src-address-list=REMOTE_Admin place-before=[:pick [find action=drop] 0]

    Оставлю свой пост, на случай если кто-то ещё ищет такую же информацию.
     
     
     
    nomis1234
    Guest
    #10
    0
    21.02.2020 12:21:00
    С помощью «on-error» теперь можно прервать цикл for/foreach и продолжить выполнение оставшейся части скрипта. В этом случае у вас даже есть возможность выполнить дополнительные инструкции, если цикл был преждевременно завершён.  
    :do {  
      :foreach i in 1,2,3,4,5,6 do={  
         :if ($i = 4) do={  
            :put "break?";  
    #        Это вызывает ошибку во время выполнения:  
            /break;  
         }  
         :if ($i = 2) do={  
            :do {  
               :put "break?";  
               /break;  
            } on-error={  
               :put "ошибка обработана. прерывание не происходит.";  
            }  
         }  
         :put $i;  
      }  
    } on-error={  
      :put "break!";  
    }  
    Вывод:  
    1  
    break?  
    ошибка обработана. прерывание не происходит.  
    2  
    3  
    break?  
    break!
     
     
     
    teslasystems
    Guest
    #11
    0
    15.12.2024 15:45:00
    Тема создана 15 лет назад, а до сих пор нет функции «break» для циклов, которая есть в любом языке программирования. Очень обидно…
     
     
     
    rextended
    Guest
    #12
    0
    16.12.2024 18:42:00
    Ты уверен?
     
     
     
    teslasystems
    Guest
    #13
    0
    16.12.2024 19:20:00
    В чём именно?
     
     
     
    rextended
    Guest
    #14
    0
    16.12.2024 19:25:00
    @optio пишет: http://forum.mikrotik.com/t/executing-script-from-net-failed/180687/1
     
     
     
    deniseik
    Guest
    #15
    0
    29.03.2025 20:47:00
    /quit
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры