Использование: [$returnOctet <номер октета (0-3)>] Введите IP-адрес и аргумент от 0 до 3, чтобы вернуть конкретный номер октета:
global returnOctet do={
:if ($1="") do={
:error "Вы не указали IP-адрес."
}
:if ($2="") do={
:error "Вы не указали октет для возврата."
}
:if (($2>3) || ($2<0)) do={
:error "Аргумент октета вне диапазона."
}
:local decimalPos "0"
:local octet1
:local octet2
:local octet3
:local octet4
:set decimalPos [:find $1 "."]
:set octet1 [:pick $1 0 $decimalPos]
:set decimalPos ($decimalPos+1)
:set octet2 [:pick $1 $decimalPos [:find $1 "." $decimalPos]]
:set decimalPos ([:find $1 "." $decimalPos]+1)
:set octet3 [:pick $1 $decimalPos [:find $1 "." $decimalPos]]
:set decimalPos ([:find $1 "." $decimalPos]+1)
:set octet4 [:pick $1 $decimalPos [:len $1]]
:if (($octet1<0 || $octet1>255) || ($octet2<0 || $octet2>255) || ($octet3<0 || $octet3>255) || ($octet4<0 || $octet4>255)) do={
:error "Октет вне диапазона."
}
:if ($2=0) do={
:return $octet1
}
:if ($2=1) do={
:return $octet2
}
:if ($2=2) do={
:return $octet3
}
:if ($2=3) do={
:return $octet4
}
}
Я работаю на RouterOS 6.7. Когда я написал этот код, всё работало нормально, но после того, как я сделал из него функцию, не могу понять, почему, если вставить :put сразу после установки octet4, он показывает правильное значение, а с возвратом почему-то возвращается значение $octet3. Аргументы 0-2 дают ожидаемые результаты.
global returnOctet do={
:if ($1="") do={
:error "Вы не указали IP-адрес."
}
:if ($2="") do={
:error "Вы не указали октет для возврата."
}
:if (($2>3) || ($2<0)) do={
:error "Аргумент октета вне диапазона."
}
:local decimalPos "0"
:local octet1
:local octet2
:local octet3
:local octet4
:set decimalPos [:find $1 "."]
:set octet1 [:pick $1 0 $decimalPos]
:set decimalPos ($decimalPos+1)
:set octet2 [:pick $1 $decimalPos [:find $1 "." $decimalPos]]
:set decimalPos ([:find $1 "." $decimalPos]+1)
:set octet3 [:pick $1 $decimalPos [:find $1 "." $decimalPos]]
:set decimalPos ([:find $1 "." $decimalPos]+1)
:set octet4 [:pick $1 $decimalPos [:len $1]]
:if (($octet1<0 || $octet1>255) || ($octet2<0 || $octet2>255) || ($octet3<0 || $octet3>255) || ($octet4<0 || $octet4>255)) do={
:error "Октет вне диапазона."
}
:if ($2=0) do={
:return $octet1
}
:if ($2=1) do={
:return $octet2
}
:if ($2=2) do={
:return $octet3
}
:if ($2=3) do={
:return $octet4
}
}
Я работаю на RouterOS 6.7. Когда я написал этот код, всё работало нормально, но после того, как я сделал из него функцию, не могу понять, почему, если вставить :put сразу после установки octet4, он показывает правильное значение, а с возвратом почему-то возвращается значение $octet3. Аргументы 0-2 дают ожидаемые результаты.
