NAP6官方旗舰店
搜索
发新帖
午饭无线 推广广告R7800 完胜 华硕路由器NETGEAR Vs ASUS T-Mobile定制版NETGEAR团购
开启左侧

Mikrotik RouterOS-脚本-语法-命令大合集

[复制链接]
1495 0

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
1、命令行使用
1.1、命令行语法
[prefix] [path] command [uparam] [param=[value]] .. [param=[value]]
[prefix] - 前缀,以"."或"/"开头(字符用来表达路径除外),可选
[path] - 命令菜单层相对路径,可选
cmdmand - 命令,必选
[uparam] - 非注明参数(纯值),可选
[param=[value]] - 注明参数名称=值,可选
":"

非注明参数写法
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool.org"
  2. cmdschool.org</font>
复制代码
注明参数写法:
  1. <font face="微软雅黑">[admin@MikroTik] >:put message="cmdschool.org"
  2. cmdschool.org</font>
复制代码
"/"
  1. <font face="微软雅黑">[admin@MikroTik] >/ip address print
  2. #   ADDRESS            NETWORK         INTERFACE
  3. 0   192.168.1.1/24     192.168.1.0     bridge01
  4. 1 D 119.128.4.27/32    119.128.4.1     ChinaNet</font>
复制代码
1.2、命令行的结束
";"与回车标志命令行结束并执行,当命令包含在"{}" or "[]" or "()"中可以不需要结束符。
";"使用演示:
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool"; :put ".org";
  2. cmdschool
  3. .org</font>
复制代码

  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool";
  2. cmdschool
  3. [admin@MikroTik] >:put ".org";
  4. .org</font>
复制代码
"回车"使用演示:
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool"
  2. cmdschool
  3. [admin@MikroTik] >:put ".org"
  4. .org</font>
复制代码
"{}"使用演示:
  1. <font face="微软雅黑">[admin@MikroTik] >{:put "cmdschool.org"}
  2. cmdschool.org</font>
复制代码
"[]"使用演示:
  1. <font face="微软雅黑">[admin@MikroTik] >[
  2.                      :put "cmdschool.org"
  3.                    ]
  4. cmdschool.org</font>
复制代码
"()"使用演示:
  1. <font face="微软雅黑">[admin@MikroTik] >put (1+4)
  2. cmdschool.org</font>
复制代码
1.3、行注解
以"#"开头的行,整行命令被忽略处理(不执行)
  1. <font face="微软雅黑">[admin@MikroTik] >#:put cmdschool.org
  2. [admin@MikroTik] ></font>
复制代码
1.4、逻辑行
以"\"结尾的行与下一行组成一个逻辑行(相当于一个物理行),当一行命令处理。
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool.org"
  2. [admin@MikroTik] >:put "cmdschool\
  3.                    .org"
  4. cmdschool.org
  5. [admin@MikroTik] >:if</font>
复制代码
1.5、常用命令

OpearatorSyntaxDescriptionExample
"/"
到达跟
".."
返回上一级目录
?

帮助命令
global
:global <var> [<value>]
定义全局变量
local
:local <var> [<value>]
定义本地变量
beep
:beep <freq> <length>
内置扬声器产生蜂鸣
delay:delay <time>暂停一段时间
put:put <expression>标准输出
len:len <expression>返回字符串长度
typeof:typeof <var>返回变量的数据类型
pick
:pick <var
<start> <end>
返回数组元素或子字符串的范围
log
:log <topic>返回执行命令所用的时间间隔
time:time <expression>

set:set <var> [<value>]赋值已经声明的变量
find
:find <arg> <arg> <start>
返回子字符串或数组元素的位置
environment
:environment print <start>

输出已初始化全局变量信息
terminal
控制台相关命令
error:error <output>终止脚本运行并产生标准错误输出
parse
:parse <expression>
输出查询的命令解析
resolve:resolve <arg>DNS解析命令(域名翻译成IP地址)
toarray
:toarray <var>将变量转换为数组类型
tobool:tobool <var>将变量转换为布尔类型
toid:toid <var>将变量转换为internal id类型
toip:toip <var>将变量转换为IP地址
toip6:toip6 <var>
将变量转换为IPv6地址

tonum:tonum <var>将变量转换为整型
totime:totime <var>将变量转换为time型
"/"命令
  1. <font face="微软雅黑">[admin@MikroTik] >/ip address
  2. [admin@MikroTik] /ip address>
  3. [admin@MikroTik] /ip address>/
  4. [admin@MikroTik] ></font>
复制代码
".."命令
  1. <font face="微软雅黑">[admin@MikroTik] >/ip address
  2. [admin@MikroTik] /ip address>
  3. [admin@MikroTik] /ip address>..
  4. [admin@MikroTik] /ip></font>
复制代码
"?"命令
  1. <font face="微软雅黑">[admin@MikroTik] >
  2. [admin@MikroTik] /ip address>?
  3. IP addresses are given to router to access it remotely and to specify it as a gateway for other hosts/routers.

  4. .. -- go up to ip
  5. add -- Create a new item
  6. comment -- Set comment for items
  7. disable -- Disable items
  8. edit --
  9. enable -- Enable items
  10. export -- Print or save an export script that can be used to restore configuration
  11. find -- Find items by value
  12. get -- Gets value of item's property
  13. print -- Print values of item properties
  14. remove -- Remove item
  15. set -- Change item properties
  16. [admin@MikroTik] /ip address></font>
复制代码
"beep"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:beep length=2s
  2. [admin@MikroTik] >:beep length=2s frequency=500
  3. [admin@MikroTik] ></font>
复制代码
"delay"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:delay 2;
  2. [admin@MikroTik] ></font>
复制代码
"put"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool.org";
  2. cmdschool.org
  3. [admin@MikroTik] ></font>
复制代码


"len"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:put [:len "cmdschool.org"];
  2. 13
  3. [admin@MikroTik] ></font>
复制代码

"typeof"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:put [:typeof 4];
  2. num
  3. [admin@MikroTik] >:put [:typeof a];
  4. str</font>
复制代码

"pick"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:put [:pick "cmdschool.org" 0 9];
  2. cmdschool
  3. [admin@MikroTik] ></font>
复制代码

"log"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:log print
  2. [admin@MikroTik] >:log info message="cmdschool";
  3. [admin@MikroTik] >:log print
  4. 17:39:24 script,info cmdschool
  5. [admin@MikroTik] ></font>
复制代码

"time"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:put [:time [:resolve www.baidu.com];];
  2. 00:00:00.002257
  3. [admin@MikroTik] ></font>
复制代码

"find"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:put [:find "cmdschool.org" "."];
  2. 9
  3. [admin@MikroTik] ></font>
复制代码

"environment"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:global cmdschool "cmdschool.org";
  2. [admin@MikroTik] >:environment print;
  3. cmdschool="cmdschool.org"
  4. [admin@MikroTik] ></font>
复制代码

"error"命令
  1. <font face="微软雅黑">[admin@MikroTik] >{
  2.                         :put "start";
  3.                         :error message="error x01";
  4.                         :put "end";
  5.                    }
  6. start
  7. error x01
  8. [admin@MikroTik] ></font>
复制代码

"parse"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:put [:parse value=resolve]
  2. (eval /resolve)
  3. [admin@MikroTik] >:put [:parse value=put]
  4. (eval /put)
  5. [admin@MikroTik] >:put [:parse value=cmdschool.org]
  6. (<%% bad command name cmdschool.org (line 1 column 1) cmdschool.org)
  7. [admin@MikroTik] ></font>
复制代码


"resolve"命令
  1. <font face="微软雅黑">[admin@MikroTik] >:put [:resolve www.baidu.com;]
  2. 180.97.33.108
  3. [admin@MikroTik] ></font>
复制代码
2、特殊字符
2.1、转义字符:

OpearatorDescriptionExample
"\"转义字符
特殊字符"\":
  1. <font face="微软雅黑">[admin@MikroTik] >:put "\"";
  2. "</font>
复制代码

2.2、转义字符常量

下面的转义序列可以用于在字符串内定义特殊的字符。

\" 插入双引号
  1. <font face="微软雅黑">[admin@MikroTik] >:put "\"";
  2. "</font>
复制代码

\\ 插入反斜杠
  1. <font face="微软雅黑">[admin@MikroTik] >:put "\\";
  2. \</font>
复制代码

\n 插入新的一行
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool.org";
  2. cmdschool.org
  3. [admin@MikroTik] >:put "cmdschool\n.org";
  4. cmdschool
  5.          .org</font>
复制代码

\t 插入水平制表符
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool\t.org";
  2. cmdschool       .org</font>
复制代码

\$ 输出 $ 字符. 否则 $ 用于引用变量.
  1. <font face="微软雅黑">[admin@MikroTik] >:put "\[        DISCUZ_CODE_32        ]quot;;
  2. [        DISCUZ_CODE_32        ]lt;/font>
复制代码

\? 输出 ? 字符. 否则 ? 是用于在控制台中输出 "help"
  1. <font face="微软雅黑">[admin@MikroTik] >:put "\?";
  2. ?</font>
复制代码

\_ 空格
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool\_.org";
  2. cmdschool .org</font>
复制代码

\a BEL (0x07)
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool\_.org";
  2. cmdschool .org</font>
复制代码

\b 退格 (0x08)
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool.\borg";
  2. cmdschoolorg</font>
复制代码

\f 换页 (0xFF)
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool\f.org";
  2. .org





  3. [dgadmin@MikroTik] /ip address></font>
复制代码

\v 插入垂直制表符
  1. <font face="微软雅黑">[admin@MikroTik] >:put "cmdschool\v.org";
  2. cmdschool
  3.          .org</font>
复制代码

\r 插入回车
\xx 从16进制数值输出字符,十六进制数值应该用大写字母对应的。
3、运算符
3.1、算术运算符
OpearatorDescriptionExample
"+"binary addition:put (3+4);
"-"binary subtraction:put (1-6);
"*"binary multiplication
:put (4*5);
"/"
binary division:put (10/2);
"-"unary negation{:local a 1; :put (-a)}

"+"运算符:
  1. [admin@MikroTik] >:put (3+4);
  2. 7
复制代码


"-"运算符:
  1. [admin@MikroTik] >:put (1-6);
  2. -5
复制代码


"*"运算符:
  1. [admin@MikroTik] >:put (4*5);
  2. 20
复制代码


"/"运算符:
  1. [admin@MikroTik] >:put (10/2);
  2. 5
复制代码


"-"运算符:
  1. [admin@MikroTik] >{:local a 1; :put (-a)}
  2. -1
复制代码


3.2、关系运算符


OpearatorDescriptionExample
"<"小于:put (3<4);
">"大于:put (3>4);
"="等于
:put (2=2);
"<="
小于等于
">="大于等于
"!="不等于
"<"运算符:
  1. [admin@MikroTik] >:put (3<4);
  2. true
复制代码


">"运算符:
1)example1
  1. [admin@MikroTik] >:put (3>4);
  2. false
复制代码


2)example2
  1. [admin@MikroTik] >:put (2>2);
  2. true
复制代码
3.3、逻辑运算符


OpearatorDescriptionExample
"~"比特位倒置
:put (~(0.0.0.0))
:put (~(255.255.255.255))
"|"
比特位或:执行逻辑的或运算。在每一对对应的比特位,如果连个比特位至少有一个值为1,则结果为
“1”否则结果为“0”。
:put ((0.0.0.0) | (0.0.0.0))
:put ((0.0.0.1) | (0.0.0.0))
:put ((0.0.1.0) | (0.0.0.1))
"^"比特位抑或:如果一对比特位的值不相等结果为1,比特位的值相等结果为0。
:put ((0.0.0.0) ^ (0.0.0.0))
:put ((0.0.0.1) ^ (0.0.0.1))
:put ((0.0.0.0) ^ (0.0.0.1))
"&"
逻辑和:如果比特对的值均为1结果为1,否则结果为0。
:put ((0.0.0.1) & (0.0.0.1))
:put ((0.0.0.0) & (0.0.0.0))
:put ((0.0.0.0) & (0.0.0.1))
"<<"左移给定数量的比特位。
:put (0.0.0.1 <<1)
:put (0.0.0.1 <<2)
:put (0.0.0.1 <<4)
">>"右移给定数量的比特位。
:put (0.0.0.2 >>1)

3.5、连接运算符


OpearatorDescriptionExample
"."连接两个字符串
","连接两个数组或者增加新元素导数组
"."运算符:
  1. [admin@MikroTik] >{
  2.                      :local a "cmdschool";
  3.                      :local a ".org";
  4.                      :put ($a.$b);
  5.                    }
  6. cmdschool.org
复制代码
3.6、其他运算符:


OpearatorDescriptionExample
"{}"包含多行的命令集,当做一条指令来处理
{
:local i 1;
:put $i;
}
"[]"命令替换,可以包含单个命令行:put [:len "cmdschool.org";];
"()"子表达式或者分组运算符:put ("value is"(4+5));
"$"替换运算符:global a 5; :put $a;
"~"二进制操作符用来匹配扩展的正则表达式的值Print all routes which gateway ends with 202

“{}”运算符:

  1. [admin@MikroTik] >{
  2.                      :local a cmdschool.org;
  3.                      :put $a;
  4.                    }
  5. 1
复制代码
"[]"运算符:
  1. [admin@MikroTik] >:put [:len "cmdschool.org";];
  2. 13
复制代码

"()"运算符:
1)分组运算符
  1. [admin@MikroTik] >:put (3+4);
  2. 7
复制代码

2)子表达式
  1. [admin@MikroTik] >:put ("=".(3+4));
  2. =7
复制代码

"$"运算符:
  1. [admin@MikroTik] >:local a 5; :put $a;
  2. 5
  3. [admin@MikroTik] >:put ("=$(3+4)");
  4. <font size="4">=7</font>
复制代码
4、变量的使用
4.1、变量作用域
global - 定义全局变量,路由内全局有效
local - 定义本地变量,同一行物理行或逻辑行内有效,逻辑行指包含在“{}”中的代码。

4.2、变量定义
:global
定义全局变量
  1. [admin@MikroTik] >:global a cmdschool.org;
  2. [admin@MikroTik] >:put $a;
  3. cmdschool.org
复制代码
:local
定义本地变量

  1. [admin@MikroTik]>:local a cmdschool.org; :put $a;
  2. cmdschool.org
复制代码
变量的命名可以是字母、数字、特殊字符,但当包含特殊字符时一定要包含在双引号内,变量名大小写敏感。
  1. [admin@MikroTik] >:local a cmdschool.org; :put $a;
  2. cmdschool.org
  3. [admin@MikroTik] >:local 1 cmdschool.org; :put $1;
  4. cmdschool.org
  5. [admin@MikroTik] >:local "*" cmdschool.org; :put [        DISCUZ_CODE_55        ]quot;*";
  6. cmdschool.org
  7. [admin@MikroTik] >{
  8.                      :local A "cmdschool"; :put $A;
  9.                      :local a ".org"; :put $a;
  10.                    }
  11. cmdschool
  12. .org
复制代码
4.3、变量赋值与引用
:set
赋值

  1. [admin@MikroTik] >:set a "cmdschool.org";
复制代码
将字符串“cmdschool.org”赋给变量a
  1. [admin@MikroTik] >{
  2.                      :local a;
  3.                      :set a cmdschool.org;
  4.                      :put $a
  5.                    }
  6. cmdschool.org;
复制代码
4.4、变量的类型


OpearatorDescriptionExample
num64位带符号整数类型
bool布尔类型,值为true或false
str字符串类型
ipIP地址类型
id'*'为前缀的十六进制值
time时间类型
array数组类型

nothing默认变量类型(未赋值前)
number:
  1. [admin@MikroTik] >{
  2.                      :local a;
  3.                      :set a 1000;
  4.                      :put $a;
  5.                      :put [:typeof $a];
  6.                    }
  7. 1000
  8. num
  9. [admin@MikroTik] >
复制代码


boolean:
  1. [admin@MikroTik] >{
  2.                      :local a; :local b;
  3.                      :set a true; :set b false;
  4.                      :put $a; :put $b;
  5.                      :put [:typeof $a]; :put [:typeof $b];
  6.                    }
  7. true
  8. false
  9. bool
  10. bool
  11. [admin@MikroTik] >
复制代码


string:
  1. [admin@MikroTik] >{
  2.                      :local a;
  3.                      :set a cmdschool.org;
  4.                      :put $a;
  5.                      :put [:typeof $a];
  6.                    }
  7. cmdschool.org
  8. str
  9. [admin@MikroTik] >{
  10.                      :local b;
  11.                      :set b "cmdschool.org";
  12.                      :put $b;
  13.                      :put [:typeof $b];
  14.                    }
  15. cmdschool.org
  16. str
  17. [admin@MikroTik] >
复制代码


ip:
  1. [admin@MikroTik] >{
  2.                      :local a;
  3.                      :set a "192.168.1.1";
  4.                      :put $a;
  5.                      :put [:typeof $a];
  6.                    }
  7. 192.168.1.1
  8. ip
  9. [admin@MikroTik] >
复制代码


错误的使用方法:
  1. [admin@MikroTik] >{
  2.                      :local b;
  3.                      :set b "192.168.1.1";
  4.                      :put $b;
  5.                      :put [:typeof $b];
  6.                    }
  7. 192.168.1.1
  8. str
  9. [admin@MikroTik] >
复制代码


internal id:
  1. [admin@MikroTik] >:local a *0x0; :put $a; :put [typeof $a];
  2. *0x0
  3. id
  4. [admin@MikroTik] >:local a *0x9; :put $a; :put [typeof $a];
  5. *0x9
  6. id      
  7. [admin@MikroTik] >:local a *0xa; :put $a; :put [typeof $a];
  8. *0xa
  9. id
  10. [admin@MikroTik] >:local a *0xf; :put $a; :put [typeof $a];
  11. *0xf
  12. id  
  13. [admin@MikroTik] >:local a *0xg; :put $a; :put [typeof $a];
  14. *0xg
  15. str  
  16. [admin@MikroTik] >
复制代码


合法字符:1-9,a-f
可以省略"0x":
  1. [admin@MikroTik] >:local a *f; :put $a; :put [typeof $a];
  2. *f
  3. id
复制代码


time:
  1. [admin@MikroTik] >{
  2.                      :local a;
  3.                      :set a 08:00:01;
  4.                      :put $a;
  5.                      :put [:typeof $a];
  6.                    }
  7. 08:00:01
  8. time
  9. [admin@MikroTik] >
复制代码


nothing:
  1. [admin@MikroTik] >{
  2.                      :local a;
  3.                      :put $a;
  4.                      :put [:typeof $a];
  5.                    }

  6. nothing
  7. [admin@MikroTik] >
复制代码
4.5、变量或函数保留关键字
and or not in 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

5、逻辑结构
5.1、顺序结构

:if
1)example1
  1. [admin@MikroTik] >:if (1<2) do={:put true};
  2. true
复制代码


2)example2
  1. [admin@MikroTik] >:if (1<2) do {
  2.                       put true;
  3.                       put ^-^
  4.                    };
  5. true
  6. ^-^
复制代码


3)example3
  1. [admin@MikroTik] >:if (1>2) do={:put true} else={:put flase};
  2. flase
复制代码


4)example4
  1. [admin@MikroTik] >:if (1>2) do {
  2.                       :put true
  3.                    } else={
  4.                       :put flase
  5.                       :put ^-^
  6.                    };
  7. flase
  8. ^-^
复制代码
5.2、循环结构

:while
  1. [admin@MikroTik] >:local i; :set i 0; :while ($i<5) do={:put $i;:set i ($i+1)};
  2. 0
  3. 1
  4. 2
  5. 3
  6. 4
  7. [admin@MikroTik] >{
  8.                     :local i;
  9.                     :set i 1;
  10.                     :while ($i<=5) do {
  11.                       :put $i;
  12.                       :set i ($i+1)
  13.                     }
  14.                   }
  15. 1
  16. 2
  17. 3
  18. 4     
  19. 5
复制代码
:for
  1. [admin@MikroTik] >:local i; :for i from=1 to=100 step=30 do={:put $i;};
  2. 1
  3. 31
  4. 61
  5. 91
  6. [admin@MikroTik] >{
  7.                     :local i;
  8.                     :for i from 1 to 5 step 1 do {
  9.                       :put $i;
  10.                     }
  11.                   }
复制代码
:foreach
  1. [admin@MikroTik] >:local i; :foreach i in [/interface find type=ether] do={:put [/interface get $i name]}
  2. ether01
  3. ether02
  4. ether03
  5. ether04
  6. ether05
  7. ether06
  8. ether07
  9. ether08
  10. ether09
  11. ether10
  12. sfp1
  13. [admin@MikroTik] >{
  14.                     :local i;
  15.                     :foreach i in [/interface find type=ether] do={
  16.                       :put [/interface get $i name]
  17.                     }
  18.                    }
  19. ether01
  20. ether02
  21. ether03
  22. ether04
  23. ether05
  24. ether06
  25. ether07
  26. ether08
  27. ether09
  28. ether10
  29. sfp1
复制代码




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表