如何在期望脚本中使用 ping

如何在期望脚本中使用 ping

需要帮助,我想 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 }
    }
}

相关内容