Назад | Перейти на главную страницу

как использовать ping в сценарии ожидания

Нужна помощь, пока я хочу проверить связь с сервером, если получил ответ, тогда продолжайте скрипт, и если нет ответа, вернитесь к предыдущему шагу, где мы получаем IP из hosts.txt

#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"}
        }

Сопоставьте "% потери пакетов" в сводке ping, как в сценарии ниже. В качестве дополнительного примечания вы упомянули, что если хост недоступен, управление должно быть возвращено foreach цикл, который будет читать следующий хост, но в вашем сценарии вы на самом деле пытаетесь что-то сделать в случае сбоя, поэтому я также включил вариант сбоя.

# Procedure to be called for each
# reachable host
proc handleHost {host} {
    do things...
    expect eof
}

# To be called for unreachable hosts
proc hostFailed {host} {
    puts "$host is not reachable."
}

#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 -noecho ping -q -w 1 -c1 $host
    expect {
        " 0% packet loss" { handleHost $host }
        eof               { hostFailed $host }
    }
}