编写RouterOS脚本时,不要使用控制台编号获取参数值
当在RouterOS控制台查看参数时候,通常会有如下操作:
[admin@ MikroTik] /interface> print
Flags: D – dynamic, X – disabled, R – running, S – slave
# NAME TYPE ACTUAL-MTU L2MTU MAX-L2MTU
0 R ether1 ether 1500 1580 1022
[admin@ MikroTik] /interface> set 0 name=LAN
Print命令查看的缓冲器获取的内部id号所引用的ID编号,因此如果你要使用查看的数字编号在脚本编辑器使用,将无法执行,如下面脚本:
/system script add name=script1 source={
/ip route set 0 gateway=3.3.3.3
}
脚本并不知道你定义的编号在内部是多少,会丢弃掉这个错误操作。因此需要使用内部ID编号,可以使用as-value ,或者使用find命令。如下实例:
[admin@MikroTik] /ip route> :put [find where dst-address=”10.0.0.0/8″]
*1
因此该实例脚本写为如下:
/system script add name=script1 source={
/ip route set *1 gateway=3.3.3.3
}
通过内部ID编号操作并不推荐,这些内部ID会随着各种添加删除操作而变动,因此为什么会推荐使用find命令操作,如下:
/system script add name=script1 source={
/ip route set [find dst-address=”0.0.0.0/0″] gateway=3.3.3.3
}