3

ルーターでいくつかの IP アドレスに ping を実行しようとしています。私はこのコードを使用します:

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

しかし、これは出力を表示します。問題は、出力を見たくないということです。その出力を別の変数に送信し、変数の内容を「regexp」で検索して結果を取得し、残りのストーリーを実行したいと思います。しかし、どうすればそれができるかわかりません。

4

3 に答える 3

9

コマンドを使用しsetます。putsコマンドはその引数を出力します。

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

またはappend、すべての IP の結果を 1 つの変数にしたい場合。

set allPingOutput ""
for {set n 0} {$n < 10} {incr n} {
    append allPingOutput [exec ping "199.99.$n.1"]
}
于 2013-04-06T08:40:08.267 に答える
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) = 到達可能

を格納して操作する代わりに、正規表現を使用しました。

于 2013-10-01T14:13:54.320 に答える
0

-c フラグを付けて ping を呼び出してみてください: ping -c 1 10.0.1.1

Tclでそれを行う方法がわからないが、たとえばphpで:

于 2013-04-06T04:31:27.237 に答える