繁体   English   中英

tcl脚本无法正常运行

[英]tcl script not running properly

我正在使用tcl脚本打开与Linux机器的ssh连接并打开虚拟交换机应用程序。 在交换机CLI内,我添加了> 1000条IP路由。

我以= ./script_name.tcl而不是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值延迟执行之外什么也不会做。

正则表达式的说明如下,

在此处输入图片说明

我将两个循环合并为一个,并在以前的目标IP和网关IP重叠的route命令之一中更改了目标IP- 1.1.$k.$l 255.255.255.255 1.1.1.5

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"
        send "ip route 3.3.$i.$j 255.255.255.255 1.1.1.5\r"
        expect -re $prompt
        incr j
    }
    incr i
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM