我正在使用tcl脚本打开与Linux机器的ssh连接并打开虚拟交换机应用程序。在交换机CLI内,我添加了> 1000条IP路由。
我以=./script_name.tcl
而不是via的身份运行脚本,tclsh
因为这会给我一些错误。
问题出在tcl如何解释tcl脚本中的while循环。我的while循环-
sleep 1
set i 1
while {$i < 3 } {
set j 2
expect "*#"
while {$j < 255} {
send "ip route 2.2.$i.$j 255.255.255.255 4.4.4.1\r"
incr j
}
incr i
}
sleep 1
expect "*#"
set k 1
while {$k < 3 } {
set l 2
expect "*#"
while {$l < 255} {
send "ip route 1.1.$k.$l 255.255.255.255 1.1.1.5\r"
incr l
}
incr k
}
我使用2个while循环分别添加〜500条路线,因此总数应超过1000条路线。问题在于仅添加了前约500条路由,而下一个while循环不起作用。下一个while循环显示将在CLI中运行,但实际上未添加路由。
但是,如果我使用1 while循环添加1000条路由。我将while循环计数器从更改为{$i < 3 }
,{$i < 5 }
并且可以正常工作。
不知何故,第二个循环无法正确执行。
使用*#
可能有些棘手,因为它也可能匹配零次出现。取而代之的是,我们可以为提示定义正则表达式,该正则表达式将匹配到行尾(即使用$
)
sleep 1
set prompt "#(\\s+)?\$"
set i 1
while {$i < 3 } {
set j 2
while {$j < 255} {
send "ip route 2.2.$i.$j 255.255.255.255 4.4.4.1\r"
expect -re $prompt
incr j
}
incr i
}
sleep 1
set k 1
while {$k < 3 } {
set l 2
while {$l < 255} {
send "ip route 1.1.$k.$l 255.255.255.255 1.1.1.5\r"
expect -re $prompt
incr l
}
incr k
}
这应该工作。如果不是,请添加exp_internal 1
并检查调试信息。顺便说一句,不要保留不必要的expect
语句,这些语句只会延迟基于该timeout
值的执行而不会执行任何操作。
正则表达式的说明如下,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句