我尝试使用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总结之前退出。有人可以帮忙解决这个问题吗?提前致谢。
答案 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
- 将其添加到脚本的顶部。