### RouterOS Script 教程(版本 S1.2)
#### 概述
MikroTik RouterOS 是一种广泛应用于网络设备的系统软件,能够使路由器实现多种高级功能。RouterOS 支持脚本功能,这使得用户可以利用脚本来自动化网络管理任务,提升效率并减少人为错误。本文档将深入探讨 RouterOS 脚本的基本概念、语法及实际应用案例。
#### RouterOS 脚本基本概念
- **脚本简介**:RouterOS 脚本是一种基于内嵌式的脚本语言,允许用户编写自定义脚本来自动化复杂的网络管理和配置任务。
- **脚本组成**:一个脚本由一系列命令和表达式组成。命令用于执行特定的任务,而表达式用于进行逻辑判断和数据处理。
- **ICE (Internal Console Expression)**:这是一种特殊的表达式,可以在脚本中使用,它能够在 RouterOS 的任何目录路径下执行。
#### RouterOS 脚本操作
- **命令格式**:在 RouterOS 中,命令通常以斜杠 `/` 开头,例如 `/ip firewall filter add chain=forward protocol=gre action=drop`。这种命令用于在防火墙过滤规则中阻止 GRE 协议的数据包。
- **ICE 表达式**:ICE 表达式以冒号 `:` 开头,可以用于执行命令或进行条件判断。例如,`:if (true) do={:put "lala"}` 这段脚本将打印出字符串 "lala"。
- **脚本触发**:脚本可以通过不同的事件触发,例如系统计划任务 (`System Scheduler`)、流量监控工具 (`Traffic Monitoring Tool`) 或网络监视工具 (`Netwatch Tool`)。
#### 版本差异
- **RouterOS 2.9 vs RouterOS 3.0**:不同版本之间的脚本存在一定的差异。例如,在 RouterOS 3.0 中,所有字符串类型的参数都需要用引号括起来,如 `comment="test"`。此外,RouterOS 3.0 不支持带有中横杠的变量名,例如 `:global test-address` 在 3.0 和 4.0 版本中是非法的。
#### 脚本在 RouterOS 中的调用
- **操作路径**:脚本可以通过 `/system script` 路径进行管理。
- **脚本定义**:在 `/system script` 目录下可以定义多条脚本规则。通过脚本编辑器,可以创建新的脚本文件并进行编辑。
- **脚本执行**:脚本可以通过 `/system script run` 命令手动执行,或者通过计划任务自动触发。例如,可以在 `/system scheduler` 目录下设置一个名为 “adsl” 的计划任务,使其每隔一分钟执行一次指定的脚本。
#### RouterOS 脚本语法详解
- **命令行结构**:每个命令行包含前缀、路径、命令以及参数。前缀指示命令类型(ICE 或普通命令),路径则指向操作菜单的位置。
- **命令语法**:命令语法格式为 `[前缀][路径]命令[未命名参数][参数=值]`。例如,`:put [/ip route get [find gateway=1.1.1.1]]`。这段脚本包含了三个命令行:`:put`、`/ip route get` 和 `find gateway=1.1.1.1`。
- **命令行结束**:命令行通常以分号 `;` 结束,但当命令包含括号 `()`, 方括号 `[]` 或者花括号 `{}` 时,则不需要额外的结束符。
- **命令行嵌套**:一条命令行中可以包含其他的命令行,通常使用方括号 `[]` 来表示。
#### 实际应用案例
假设我们需要定期检查路由器的某些端口是否正常工作,并记录日志。可以创建一个脚本,利用 `/ip service print` 获取服务状态,然后使用 `:log` 命令记录相关信息。例如:
```
:local services [/ip service print]
:foreach s in=$services do={
:if ($s.disabled = "yes") do={
:log warning "Service $s.name is disabled!"
}
}
```
此脚本首先获取所有服务的状态,并存储在一个变量 `services` 中。然后遍历这个变量,检查每个服务是否被禁用,如果是,则记录一条警告日志。
通过以上内容,可以看出 RouterOS 脚本的强大之处在于它能够帮助网络管理员高效地管理和监控网络设备,实现自动化运维的目标。熟练掌握 RouterOS 脚本不仅能够提高工作效率,还能更好地应对网络环境的变化。