Страница 1 из 1

Скрипт выбора наибольшего отклика пинга и массивы

Добавлено: 08 май 2023, 01:44
DyadyaGenya
Доброго времени суток. Начал изучать для себя микротик, поэтому как бы сроков никаких нет.
Для начала хотел бы разобраться с одним из простейших вроде бы вопросов - пинги и их обработка. Вроде бы сами пинги запускаю. Вот такой скрипт:

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

:local count 10
:local address "8.8.8.8"
:local interval 1

:put "SEQ HOST SIZE TTL TIME STATUS"
:for i from=0 to=($count-1) do={
  :put "Ping $i: [ping $address count=1 interval=$interval]"
}
Потом решил его усложнить и выводить как обычные пинги, с размером, ттл, временем отклика

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

:local count 10
:local address "8.8.8.8"
:local interval 1

:for i from=0 to=($count-1) do={
  :local pingResult [ping $address count=1 interval=$interval]
  :local pingTime [:pick [:toarray $pingResult] 3]
  :put "Ping $i: $pingResult Time: $pingTime"
}
Получилась ерунда. Тогда решил зайти с другой стороны и записать результаты в массивы:

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

:local count 10
:local address "8.8.8.8"
:local interval 1

:local ttlArray {}
:local sizeArray {}
:local timeArray {}

:put "Columns: SEQ, HOST, SIZE, TTL, TIME"
:for i from=0 to=($count-1) do={
  :local result [/ping $address count=1 interval=$interval];
  :local ttl [:tonum [:pick $result 3]]
  :local size [:tonum [:pick $result 2]]
  :local time [:tonum [:pick [:find $result "time=" 0] $result]]
  :put ("Ping $i: " . $ttl . " " . $size . " " . $time . "ms")
  :set ($ttlArray->$i) $ttl
  :set ($sizeArray->$i) $size
  :set ($timeArray->$i) $time
}
И сразу же выбило синтаксическую ошибку в строке 5. Подозреваю, что не правильно объявляю массив. Можете подсказать где ошибка?

Re: Скрипт выбора наибольшего отклика пинга и массивы

Добавлено: 08 май 2023, 14:08
DyadyaGenya
Чтоб было понятней. В окончательном результате хочу получить что-то типа такого:

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

Nomber   SEQ        HOST      SIZE     TTL   TIME       STATUS    Count    Interval
Ping 0: [0   ping 8.8.8.8     56      116   39ms80us    Success   count=1 interval=1]
Ping 1: [1   ping 8.8.8.8     56      116   36ms707us   Success   count=1 interval=1]

Max ping is Ping 0 (39ms80us)
При этом есть промежуточные хотелки. Сделать вывод массивов, которые состоят из данных SIZE, TTL, TIME.

Re: Скрипт выбора наибольшего отклика пинга и массивы

Добавлено: 08 май 2023, 17:54
DyadyaGenya
Пока что на вики нашел ошибку объявления массива, теперь выглядит так:

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

:local count 10
:local address "8.8.8.8"
:local interval 1

:local ttlArray {:toarray ""}
:local sizeArray {:toarray ""}
:local timeArray {:toarray ""}

:for i from=0 to=($count-1) do={
    :local result [/ping $address count=1 interval=$interval]

    :local ttl [/ping get $result name="ttl"]
    :local size [/ping get $result name="size"]
    :local time [/ping get $result name="time"]

    :set ($ttlArray->"$i") $ttl
    :set ($sizeArray->"$i") $size
    :set ($timeArray->"$i") $time

    :put ("Ping $i: $result")
}

:put ("TTL array: $ttlArray")
:put ("Size array: $sizeArray")
:put ("Time array: $timeArray")
Но теперь в 12-й строке ошибка:

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

expected end of command (line 12 column 27)
типа ожидалось окончание команды