1

我正在尝试使用期望登录到远程交换机后 ping 4 个不同的 IP 地址,登录部分工作正常,前 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.

此外,我发现这个命令对于开发期望脚本非常有用:exp_internal 1-- 将它添加到脚本的顶部。

于 2013-01-21T17:40:44.963 回答