cy's Blog

好好学习 天天上网

Mikrotik ROS脚本语法入门

ROS也可称为是Route Operation System,意为"软件路由器".

一般认为用普通PC安装一套专用的路由器程序组成的系统称为软件路由器,PC电脑+免费的软件=专业的软件路由器

ROS 脚本 注解 
四种变量 
global - 定义全局变量, 可以要所有的 脚本 中调用共享 
local - 定义本地变量,只能在其所要的 脚本 下调用,不能被其它 脚本 共享 
loop index variables - 定义在for或foreach里的索引号变量 
monitor variables - 监视变量 
ROS算术操作 
- 负号;相减。 
! 逻辑非。 
/ 相除。 
. 连接。两个符串的连接,添加元素到列表 
^ 异或(XOR) 
~ 取反 
* 相剩 
& 与(AND) 
&&逻辑与 
+ 相加 
< 小于 
<<向左位移 
<=小于等于 
> 大于 
>=大于等于 
>>向右位移 
| 或 
||逻辑或 
ROS说明书里的例子: 
计算顺序 
[admin@MikroTik]> :put (10+1-6*2=11-12=2+(-3)=-1) 
false 
[admin@MikroTik]> :put (10+1-6*2=11-12=(2+(-3)=-1)) 
true 
逻辑非 
[admin@MikroTik]> :put (!true) 
false 
[admin@MikroTik]> :put (!(2>3)) 
true 
数位取反 
[admin@MikroTik]> :put (~255.255.0.0) 
0.0.255.255 
加法 
[admin@MikroTik]> :put (3ms + 5s) 
00:00:05.003 
[admin@MikroTik]> :put (10.0.0.15 + 0.0.10.0) 
cannot add ip address to ip address 
[admin@MikroTik]> :put (10.0.0.15 + 10) 
10.0.0.25 
减法 
[admin@MikroTik]> :put (15 - 10) 

[admin@MikroTik]> :put (10.0.0.15 - 10.0.0.3) 
12 
[admin@MikroTik]> :put (10.0.0.15 - 12) 
10.0.0.3 
[admin@MikroTik]> :put (15h - 2s) 
14:59:58 
乘法 
[admin@MikroTik]> :put (12s * 4) 
00:00:48 
[admin@MikroTik]> :put (-5 * -2) 
10 
除法 
[admin@MikroTik]> :put (10s / 3) 
00:00:03.333 
[admin@MikroTik]> :put (5 / 2) 

[admin@MikroTik]> :put (0:0.10 / 3) 
00:00:02 
比较 
[admin@MikroTik]> :put (10.0.2.3<=2.0.3.10) 
false 
[admin@MikroTik]> :put (100000s>27h) 
true 
[admin@MikroTik]> :put (60s,1d!=1m,3600s) 
true 
[admin@MikroTik]> :put (bridge=routing) 
false 
[admin@MikroTik]> :put (yes=false) 
false 
[admin@MikroTik]> :put (true=aye) 
false 
逻辑与 AND, 逻辑或 OR 
[admin@MikroTik]> :put ((yes && yes) || (yes && no)) 
true 
[admin@MikroTik]> :put ((no || no) && (no || yes)) 
false 
数位与AND, 或OR, 异或XOR 
[admin@MikroTik]> :put (10.16.0.134 & ~255.255.255.0) 
0.0.0.134 
位移操作 
[admin@MikroTik]> :put (~((0.0.0.1 << 7) - 1)) 
255.255.255.128 
连接操作 
[admin@MikroTik]> :put (1 . 3) 
13 
[admin@MikroTik]> :put (1,2 . 3) 
1,2,3 
[admin@MikroTik]> :put (1 . 3,4) 
13,4 
[admin@MikroTik]> :put (1,2 . 3,4) 
1,2,3,4 
[admin@MikroTik]> :put ((1 . 3) + 1) 
14 
[admin@MikroTik]> :seta "It"s " 
[admin@MikroTik]> :put ($a . OK) 
It"s OK 
ROS 脚本 保留字 
beep execute global list pick time toip typeof 
delay find if local put toarray tonum while 
do for led log resolve tobool tostr 
environment foreach len nothing set toid totime 
:beep length=2s frequency=10000 
产生2秒10kHz的音频 
length缺省值为100ms 
frequency缺省值为1000Hz 
:set a "/int dis lan/n/int dis wan" 
:execute $a 
执行多条命令,例子里执行了两条命令。/n是换行 
:global 
定义全局变量 
:list interface 
显示相关命令。显示当前目录及子目录下有关interface的命令 
:pick 
取字符串或数组的某一断。字符串(数组)的第一个为0。 
[admin@MikroTik]>:put [:pick "I love you" 2 6] 
love 
:time 
执行命令所需的时间 
[admin@MikroTik]> :put [:time [:resole www.sina.com.cn]] 
00:00:00.006 
执行解析www.sina.com.cn这个域名所需的时间 
toip toarray tonum tobool tostr toid totime 
转换值类型 
:delay 3 
延时3秒,缺省为1秒 
:find 
查找字符串或数组中第一个出现查找内容的位置 
[admin@MikroTik]>:put [:find abcdcba cd] 

[admin@MikroTik]>:put [:find "1,2,3,4,3,2,1" 2] 

:put 
输出到屏幕上,上面就很多例子了。 
:if 
条件选择 
[admin@MikroTik]>:if(1<2) do={:put true} 
true 
如果条件为真,执行do={}里面的命令 
[admin@MikroTik]>:if(1>2) do={:put true} else={:put flase} 
flase 
如果条件为真,执行do={}里面的命令,否则执行else={}里有命令 
:local 
定义本地变量 
:while 
条件为真时循环执行do={}里的 脚本 命令 
[admin@MikroTik]>:set i 0;:while($i<5) do={:put $i;:set i ($i+1)} 






:for 
循环执行do={}里的 脚本 命令 
:for i from=1 to=100 step=30 do={:put $i} 

31 
61 
91 
:foreach 
在集合(数组)里循环执行do={}里的 脚本 命令 
:foreach i in=[/interface find type=ether] do={:put [/interface get $i name]} 
ether1 
ether2 
ether3 
ether4 
在[/interface find type=ether]的集合(类型为ether的interface ID)循环输出 
interface的名称。我这时有四张网卡 
:log 日志类型 日志内容 
写文本到日志(script log) 
类型在/system logging里可以找到 
:log info "系统信息" 
到LOG里查查运行结果吧 
:resolve 
解析域名的IP地址 
[admin@MikroTik] > :put [:resolve www.sina.com.cn] 
61.172.201.240 
:environment print 
显示所有变量及其值 
:len 
字符串或数组的长度 
[admin@MikroTik] > :put [:len hello] 

[admin@MikroTik] > :put [:len "1,2,23,65,54,6"] 

:nothing 
空值。nothing不等0,不等于空字符"" 
:find abc a的结果是0 
:find abc d的结果是nothing 
:set 
赋值 
[admin@MikroTik] > :set a test 
将abc字符赋给变量a 
[admin@MikroTik] > :put $a 
test 
[admin@MikroTik] > :put a 

引用变量的值要在变量前面加$


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«   2019年11月   »
123
45678910
11121314151617
18192021222324
252627282930
搜索
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
标签列表
    作者列表
    站点信息
    • 文章总数:439
    • 页面总数:2
    • 分类总数:10
    • 标签总数:0
    • 评论总数:2002
    • 浏览总数:571064

    Powered By Z-BlogPHP 1.5.2 Zero

    Copyright 2008-2017 lcy. Some Rights Reserved.