RouterOS的数组使用和其他语言大同小异,简单介绍下数组的使用

一个数组的定义如下,使用全局变量定义数组array,包括元素1,2,3,4

:global array {1;2;3;4}

输出数组的值

:put $array

输出第2个元素值,记住数组序列是从0开始计数

:put [:pick $array 1]

我们也可以将一个元素赋值给一个变量

:global tmp [:pick $array 2]

我们可以通过len得到数组的长度,并输出

:put [:len $array]

通过:len得到该数组有多少个元素,这样有利于我们后面一些代码的处理,比如for

:for i from=0 to=[:len $array]

我们也可以使用foreach循环取值

:foreach i in=[/ip arp find] do={
:set arraymac ($arraymac ,[/ip arp get $i mac-address ])
:set arraynum ($arraynum , $i)
}

下面是一个通过比较在arp列表里是否存在相同mac地址并删除的实例(脚本写的很丑,请谅解),注意定义数组变量时最好不要用全局变量,因为脚本执行完后,全局变量是不会被清空的,下次执行时会重复追加元素,一般使用局部变量local定义:

# 定义mac数组

:local arraymac

# 定义标号数组

:local arraynum

# 相同mac的标号数组

:local arrays

# 第一个相同mac标号变量

:local macfirst
:local n
:local n1

# 取arp下的mac地址和他们在arp列表中的标号

:foreach i in=[/ip arp find] do={
:set arraymac ($arraymac ,[/ip arp get $i mac-address ])
:set arraynum ($arraynum , $i)
}

#取得数组长度

:set n [:len $arraymac]

#双循环比较

:for m from=0 to=($n-1) do={
    :for k from=1 to=$n do={
        :if ([:pick $arraymac $m] = [:pick $arraymac $k]) do={
          :set macfirst [:pick $arraynum $m]
          :set arraySN ($arraynum , [:pick $arraynum $k])
        }
   }
}

#取得数组长度

:set n1 [:len $arraySN]

#删除arp列表中相同的mac地址

:for j from=0 to=$n1 do={
/ip arp remove [:pick $arraySN $j]
}
/ip arp remove $macfirst

希望以上介绍,对你操作RouterOS脚本有帮助

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章很值,打赏犒劳作者一下