期待ping脚本跳过发送步骤

时间:2013-01-21 17:27:29

标签: linux bash tcl expect

我尝试使用expect登录到远程交换机后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总结之前退出。有人可以帮忙解决这个问题吗?提前致谢。

2 个答案:

答案 0 :(得分:1)

您可能遇到超时问题。 Expect的默认超时为10秒。 20次ping将超过约。

在脚本的开头使用以下命令:

set timeout 60

将其设置为1分钟。

答案 1 :(得分: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 - 将其添加到脚本的顶部。