1

期待を使用してリモートスイッチにログインした後、4つの異なるIPアドレスにpingを実行しようとしています。ログイン部分は正常に機能し、最初の2つのpingコマンド(送信); ただし、3 番目の ping コマンドをスキップして 4 番目の ping コマンドを実行します。そしてほとんどの場合、ping の概要を表示する前にスクリプトを終了します。

私のスクリプト:

 #!/usr/bin/expect
 spawn telnet 192.168.xx.xx
 expect "Username:" 
 send "username\r"
 expect "Password:"
 send "password\r"
 expect ">"
 send "ping -c 20 192.168.1.10\r"
 expect ">"
 send "ping -c 20 192.168.10.22\r"
 expect ">"
 send "ping -c 20 192.168.10.33\r"
 expect ">"
 send "ping -c 20 192.168.11.10\r"
 expect ">"
 send "quit\r" # command to exit from switch 
 expect eof

すべての送信コマンドの前に「sleep 4」を追加しようとしましたが、結果は同じです。

出力:

<switch>ping -c 20 192.168.1.20
  PING 192.168.1.20: 56  data bytes, press CTRL_C to break
    Reply from 192.168.1.20: bytes=56 Sequence=1 ttl=255 time=1 ms
    Reply from 192.168.1.20: bytes=56 Sequence=2 ttl=255 time=1 ms
    Reply from 192.168.1.20: bytes=56 Sequence=3 ttl=255 time=101 ms
    Reply from 192.168.1.20: bytes=56 Sequence=4 ttl=255 time=2 ms
    Reply from 192.168.1.20: bytes=56 Sequence=5 ttl=255 time=2 ms
    Reply from 192.168.1.20: bytes=56 Sequence=6 ttl=255 time=2 ms
    Reply from 192.168.1.20: bytes=56 Sequence=7 ttl=255 time=102 ms
    Reply from 192.168.1.20: bytes=56 Sequence=8 ttl=255 time=2 ms
    Reply from 192.168.1.20: bytes=56 Sequence=9 ttl=255 time=3 ms
    Reply from 192.168.1.20: bytes=56 Sequence=10 ttl=255 time=1 ms
    Reply from 192.168.1.20: bytes=56 Sequence=11 ttl=255 time=108 ms
    Reply from 192.168.1.20: bytes=56 Sequence=12 ttl=255 time=1 ms
    Reply from 192.168.1.20: bytes=56 Sequence=13 ttl=255 time=1 ms
    Reply from 192.168.1.20: bytes=56 Sequence=14 ttl=255 time=2 ms
    Reply from 192.168.1.20: bytes=56 Sequence=15 ttl=255 time=130 ms
    Reply from 192.168.1.20: bytes=56 Sequence=16 ttl=255 time=1 ms
    Reply from 192.168.1.20: bytes=56 Sequence=17 ttl=255 time=2 ms
    Reply from 192.168.1.20: bytes=56 Sequence=18 ttl=255 time=1 ms
    Reply from 192.168.1.20: bytes=56 Sequence=19 ttl=255 time=160 ms
    Reply from 192.168.1.20: bytes=56 Sequence=20 ttl=255 time=1 ms

  --- 192.168.1.20 ping statistics ---
    20 packet(s) transmitted
    20 packet(s) received
    0.00% packet loss
    round-trip min/avg/max = 1/31/160 ms

<switch>ping -c 20 192.168.10.22
  PING 192.168.10.22: 56  data bytes, press CTRL_C to break
    Reply from 192.168.10.22: bytes=56 Sequence=1 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=2 ttl=255 time=12 ms
    Reply from 192.168.10.22: bytes=56 Sequence=3 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=4 ttl=255 time=35 ms
    Reply from 192.168.10.22: bytes=56 Sequence=5 ttl=255 time=2 ms
    Reply from 192.168.10.22: bytes=56 Sequence=6 ttl=255 time=16 ms
    Reply from 192.168.10.22: bytes=56 Sequence=7 ttl=255 time=2 ms
    Reply from 192.168.10.22: bytes=56 Sequence=8 ttl=255 time=29 ms
    Reply from 192.168.10.22: bytes=56 Sequence=9 ttl=255 time=4 ms
    Reply from 192.168.10.22: bytes=56 Sequence=10 ttl=255 time=39 ms
    Reply from 192.168.10.22: bytes=56 Sequence=11 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=12 ttl=255 time=57 ms
    Reply from 192.168.10.22: bytes=56 Sequence=13 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=14 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=15 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=16 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=17 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=18 ttl=255 time=2 ms
    Reply from 192.168.10.22: bytes=56 Sequence=19 ttl=255 time=1 ms
    Reply from 192.168.10.22: bytes=56 Sequence=20 ttl=255 time=2 ms

  --- 192.168.10.22 ping statistics ---
    20 packet(s) transmitted
    20 packet(s) received
    0.00% packet loss
    round-trip min/avg/max = 1/10/57 ms

<switch>ping -c 20 192.168.11.10
  PING 192.168.11.10: 56  data bytes, press CTRL_C to break
    Reply from 192.168.11.10: bytes=56 Sequence=1 ttl=255 time=4 ms
    Reply from 192.168.11.10: bytes=56 Sequence=2 ttl=255 time=1 ms
    Reply from 192.168.11.10: bytes=56 Sequence=3 ttl=255 time=44 ms
    Reply from 192.168.11.10: bytes=56 Sequence=4 ttl=255 time=1 ms
    Reply from 192.168.11.10: bytes=56 Sequence=5 ttl=255 time=57 ms
    Reply from 192.168.11.10: bytes=56 Sequence=6 ttl=255 time=3 ms
    Reply from 192.168.11.10: bytes=56 Sequence=7 ttl=255 time=4 ms
    Reply from 192.168.11.10: bytes=56 Sequence=8 ttl=255 time=4 ms
    Reply from 192.168.11.10: bytes=56 Sequence=9 ttl=255 time=3 ms
    Reply from 192.168.11.10: bytes=56 Sequence=10 ttl=255 time=3 ms
    Reply from 192.168.11.10: bytes=56 Sequence=11 ttl=255 time=3 ms
    Reply from 192.168.11.10: bytes=56 Sequence=12 ttl=255 time=2 ms
    Reply from 192.168.11.10: bytes=56 Sequence=13 ttl=255 time=2 ms
    Reply from 192.168.11.10: bytes=56 Sequence=14 ttl=255 time=1 ms
    Reply from 192.168.11.10: bytes=56 Sequence=15 ttl=255 time=1 ms
    Reply from 192.168.11.10: bytes=56 Sequence=16 ttl=255 time=1 ms
    Reply from 192.168.11.10: bytes=56 Sequence=17 ttl=255 time=1 ms
    Reply from 192.168.11.10: bytes=56 Sequence=18 ttl=255 time=1 ms
    Reply from 192.168.11.10: bytes=56 Sequence=19 ttl=255 time=1 ms
    Reply from 192.168.11.10: bytes=56 Sequence=20 ttl=255 time=1 ms
    [rousseau@localhost script]$ 

ご覧のとおり、3 番目の ping をスキップして (数回チェック)、4 番目の ping の概要の前に終了しました。誰でもこれを修正するのを手伝ってもらえますか? 前もって感謝します。

4

2 に答える 2

1

タイムアウトの問題が発生している可能性があります。Expect のデフォルトのタイムアウトは 10 秒です。20 回の ping には、それ以上の時間がかかります。

スクリプトの先頭で次のコマンドを使用します。

set timeout 60

1分に設定します。

于 2013-01-21T17:38:32.553 に答える
0

タイムアウトなのかな。あなたは次のようなものを試すかもしれません

send "password\r"
expect ">"
foreach ip {192.168.1.10 192.168.10.22 192.168.10.33 192.168.11.10} {
    send "ping -c 20 $ip\r"
    expect {
        timeout {puts "Timed out waiting for response from $ip"}
        ">"
    }
}
send "quit\r"

timeoutたとえば、タイムアウトが発生している場合は、値を設定して試すことができますset timeout 20

また、このコマンドは、expect スクリプトの開発に非常に役立ちます。exp_internal 1-- スクリプトの先頭に追加します。

于 2013-01-21T17:40:44.963 に答える