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脚本有帮助
评论前必须登录!
注册