ルーターでいくつかの IP アドレスに ping を実行しようとしています。私はこのコードを使用します:
for {set n 0} {$n < 10} {incr n} {puts [exec "ping 199.99.$n.1]}
しかし、これは出力を表示します。問題は、出力を見たくないということです。その出力を別の変数に送信し、変数の内容を「regexp」で検索して結果を取得し、残りのストーリーを実行したいと思います。しかし、どうすればそれができるかわかりません。
コマンドを使用し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"]
}
を使用することは非常に重要です 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) = 到達可能
を格納して操作する代わりに、正規表現を使用しました。
-c フラグを付けて ping を呼び出してみてください: ping -c 1 10.0.1.1
Tclでそれを行う方法がわからないが、たとえばphpで: