Нужна помощь, пока я хочу проверить связь с сервером, если получил ответ, тогда продолжайте скрипт, и если нет ответа, вернитесь к предыдущему шагу, где мы получаем 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 } } }