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";
}}
不工作哪里有问题?
如果您从终端运行脚本,那么您将收到有用的错误消息,以帮助您更正自己的脚本。要运行脚本,请转到/system script
然后通过运行print
获取脚本的编号。然后可以使用run <number>
运行该脚本。您还可以从打印输出中看到脚本中突出显示的错误语法。
收到的第一个错误是:
预期命令结束(第 3 行第 11 列)
这是因为您的变量名称包含的-
不是变量名称的有效字符 - 请参阅手册:脚本#变量。
在通过简单地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]