【问题标题】:mikrotik dynamic IP to static with commentmikrotik 动态 IP 到带有注释的静态 IP
【发布时间】:2017-07-13 10:41:25
【问题描述】:
mikrotik 脚本自动将动态 IP 更改为静态 IP,注释为日期
:local comment
:local address
:local mac-address
{
/ip dhcp-server lease
:foreach a in=[find where dynamic] do={
:set dhcpip [ get $i address ];
:set mac [ get $i mac-address ];
add address=$dhcpip mac-address=$mac comment="$date";
}}
问题出在哪里?
【问题讨论】:
标签:
dynamic
static
ip
mikrotik
【解决方案1】:
如果您从终端运行脚本,那么您会收到有用的错误消息,以帮助您更正自己的脚本。要运行脚本,请转到/system script,然后通过运行print 获取脚本的编号。然后可以使用run <number> 运行该脚本。您还可以从 print 的输出中看到脚本中突出显示的错误语法。
收到的第一个错误是:
预计命令结束(第 3 行第 11 列)
这是因为您的变量名包含 -,它不是变量名的有效字符 - 请参阅 Manual:Scripting#Variables。
在通过简单地创建变量mac 来纠正此错误时,我注意到您在顶部声明的变量不是您在脚本和其他地方使用的变量mac。这实际上是您下一个错误的原因:
语法错误(第 7 行第 6 列)
在将所有变量更新为一致之后(dhcpip 到 address 和 a 到 i)最后一个问题是 $date 没有在任何地方定义。为此,您可以在脚本中的某处添加:local date [/system clock get date]。有了它,您应该能够修复自己的脚本 - 我强烈建议您这样做,以便从错误中吸取教训。
除了糟糕的实现之外,对该脚本的一个批评是,您可以使用make-static 命令,而不是存储到变量中。以下是执行此操作的脚本:
/ip dhcp-server lease
:foreach i in=[find dynamic] do={
make-static $i
set $i comment=[/system clock get date]
}
如果您不需要注释,则可以使用单个命令将所有动态租约设为静态:
/ip dhcp-server lease make-static [find dynamic]