将“ping”输出发送到变量

时间:2013-04-06 04:21:05

标签: scripting tcl router

我正在尝试ping路由器中的某些IP地址。我使用这段代码:

for {set n 0} {$n < 10} {incr n} {puts [exec "ping 199.99.$n.1]}

但这将显示输出。 问题是我不想看到输出。我想将该输出发送到另一个变量,并使用“regexp”搜索变量的内容并获得结果,并完成故事的其余部分。 但我不知道我怎么能这样做。

3 个答案:

答案 0 :(得分:8)

使用set命令。 puts命令打印它的参数。

set pingOutput [exec ping "199.99.$n.1"]

append如果您希望所有IP的结果都在一个变量中。

set allPingOutput ""
for {set n 0} {$n < 10} {incr n} {
    append allPingOutput [exec ping "199.99.$n.1"]
}

答案 1 :(得分:0)

尝试使用-c标志调用ping: ping -c 1 10.0.1.1

不确定如何在tcl中执行此操作但在php中例如:

答案 2 :(得分:0)

使用ping -c1 <IP address>非常重要,否则脚本将永远不会因ping过程永远不会结束而停止:)

我的代码使用每个IP的结果数组

for {set i 2 } {$i < 10} {incr i} {

catch {if {[regexp {bytes from} [exec ping -c1 192.168.12.$i]]} { 
          set flag "reachable" 
        } else     { set flag "not reachable"}

set  result(192.168.12.$i) $flag
} 
}
parray result

输出:

结果(192.168.12.2)=可到达

结果(192.168.12.3)=可到达

结果(192.168.12.5)=可到达

结果(192.168.12.6)=可到达

结果(192.168.12.7)=可到达

结果(192.168.12.9)=可到达

我没有存储和操作,而是使用了regexp。