0

私は期待に1つの疑いがあります。コマンドの結果を文字列変数に格納したい。誰かが私のコードの間違いを教えてもらえますか? 機能していません。使用expect_out(buffer)しましたが、動作しません。

#!/usr/bin/expect
package require Expect
set Argu1 [lindex $argv 0]
set Argu2 [lindex $argv 1]

if {$argc == 2} {

    if {[regexp {^(\d|[1-9]\d|1\d\d|2[0-4]\d|[2][5][0-5])\.(\d|[1-9]\d|1\d\d|2[
        0-4]\d|[2][5][0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|[2][5][0-5])\.(\d|[1-9]
        \d|1\d\d|2[0-4]\d|[2][5][0-5])$} $Argu1 match ]} {
        puts "VALID IP-ADDRESS"
        set timeout $Argu2-1
        spawn ping $Argu1
        expect "Expect"
        set string $expect_out(buffer)
        puts $string
        puts "SUCCESS"
        exit 
    } else { 
        puts "INVALID IP-ADDRESS"
    } 
} else { 
    puts "YOU HAVE TO GIVE TWO ARGUMENTS\n FIRST ARGUMENT SHOULD BE 
    IP-ADDRESS \n SECOND ARGUMENT SHOULD BE THE NUMBER OF PACKETS
    YOU WANT TO SEND"
}
4

1 に答える 1

1

あなたが別の質問に対する私の回答に回答していないので、私はあなたの質問に答えるのをためらっています. しかし、他の誰も応答していないので、私はあなたを助けようとします.

ここで$expect_out(buffer)を使用する必要はないと思います。「0% 損失」または「0% パケット損失」を返す ping が ping が成功したことを意味すると仮定すると、次のことを試すことができます (未テスト)。明らかに、「0%」を成功を意味するものに変更できます。

#!/usr/bin/expect
package require Expect
set Argu1 [lindex $argv 0]
set Argu2 [lindex $argv 1]

if {$argc == 2} {

    if {[regexp {^(\d|[1-9]\d|1\d\d|2[0-4]\d|[2][5][0-5])\.(\d|[1-9]\d|1\d\d|2[
        0-4]\d|[2][5][0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|[2][5][0-5])\.(\d|[1-9]
        \d|1\d\d|2[0-4]\d|[2][5][0-5])$} $Argu1 match ]} {
        puts "VALID IP-ADDRESS"
        set timeout $Argu2-1
        spawn ping $Argu1
        expect {
          "0%" {puts "The IP address was successfully pinged"}
          "default" {puts "Could not ping this IP address"}
        }
        exit 
    } else { 
        puts "INVALID IP-ADDRESS"
    } 
} else { 
    puts "YOU HAVE TO GIVE TWO ARGUMENTS\n FIRST ARGUMENT SHOULD BE 
    IP-ADDRESS \n SECOND ARGUMENT SHOULD BE THE NUMBER OF PACKETS
    YOU WANT TO SEND"
}

私が「0%」を提案する理由は次のとおりです。Windows マシンから ping に成功すると、次のようなメッセージが表示されます (「0% 損失」に注意してください)。

C:\Documents and Settings\Brian>ping 192.168.1.1

Pinging 192.168.1.1 with 32 bytes of data:

Reply from 192.168.1.1: bytes=32 time=1ms TTL=64
Reply from 192.168.1.1: bytes=32 time<1ms TTL=64
Reply from 192.168.1.1: bytes=32 time<1ms TTL=64
Reply from 192.168.1.1: bytes=32 time<1ms TTL=64

Ping statistics for 192.168.1.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 1ms, Average = 0ms

Unix マシンからは、次のようになります (「0% パケット損失」に注意してください)。

[brian@rex 4]$ ping -c 1 192.168.1.87
PING 192.168.1.87 (192.168.1.87) 56(84) bytes of data.
64 bytes from 192.168.1.87: icmp_seq=0 ttl=64 time=42.1 ms

--- 192.168.1.87 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.153/42.153/42.153/0.000 ms, pipe 2

ping が成功したことを示す多くの指標を選択できます。私は、0% のパケット損失 (成功の明確な指標) があったという事実を選択しました。このexpectコマンドは ping の結果を検索し、「0%」が見つかった場合は「The IP address was successfully pinged.」を出力します。

于 2012-05-23T11:44:16.627 に答える