![如何在期望脚本中使用 ping](https://linux22.com/image/756089/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%9C%9F%E6%9C%9B%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%20ping.png)
需要帮助,我想 ping 服务器,如果收到回复则继续执行脚本,如果没有回复则再次转到上一步,从 hosts.txt 获取 IP
#Setting up Variables
set timeout 5
set fid [open ./hosts.txt r]
set contents [read -nonewline $fid]
close $fid
#Grabbing Password to be used in script further
stty -echo
send_user -- "Enter the Password: "
expect_user -re "(.*)\n"
send_user "\n"
stty echo
set pass $expect_out(1,string)
foreach host [split $contents "\n"] {
set timeout 5
spawn ping $host
expect {
"Reply" {puts "$host Is Up"}
"Request" {puts "$host Is Down"}
}
答案1
匹配摘要中的“%packet loss” ping
,如下面的脚本所示。顺便提一下,您提到如果主机不可访问,则应将控制权交还给循环foreach
,循环将读取下一个主机,但在您的脚本中,您实际上会在失败时尝试执行某些操作,因此我还包含了一个失败选项。
# 每次调用的程序 # 可访问主机 proc handleHost {主机} { 做事... 期望 eof } # 当主机无法访问时调用 proc hostFailed {主机} { 放置“$host 不可访问。” } 设置变量 设置超时 5 设置 fid [打开 ./hosts.txt r] 设置内容 [read -nonewline $fid] 关闭 $fid #获取密码以便进一步在脚本中使用 stty-echo 命令 send_user --"输入密码:" expect_user -re "(.*)\n" 发送用户“\n” stty 回显 设置传递$expect_out(1,string) foreach 主机 [split $contents "\n"] { 设置超时 5 spawn-noecho ping-q-w 1-c1 $host 预计 { “0%数据包丢失” { handleHost $host } eof { hostFailed $host } } }