Для выхода из кода, если ожидаемое условие не выполнено, RHEL - PullRequest
0 голосов
/ 25 марта 2020

Я написал небольшой код, используя expect в Red Hat Linux 8, чтобы проверить, доступен ли хост с помощью ICMP Ping. Мое намерение состоит в том, что если пункт назначения недоступен, то выполнение должно прерваться. Пожалуйста, найдите под кодом

#!/usr/bin/expect
lassign $argv 1 2
spawn ping -c 2 -i 3 -W 1 $1
 expect  {
    " 0%" {puts "Source is reachable!"}
    " 100%" {puts "Source is not rechable. Please restart IPSEC and check!"}
     eof {break\r }
    }

Однако, с помощью приведенного выше оператора break выполнение продолжается до следующей строки. Я новичок в expect в bash сценариях. Любая помощь будет высоко ценится

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Конечно, вам не нужно ожидать этого: нет ничего, что требует взаимодействия. Проще говоря bash

result=$( ping -c 2 -i 3 -W 1 "$1 )
if [[ $result == *"100.0% packet loss"* ]]; then
    echo "not reachable"
fi

Поскольку вы уже ожидаете, вы можете использовать любую команду Tcl :

set result [exec ping -c 2 -i 3 -W 1 $1]
if {[string first { 100.0%} $result] != -1} {
    puts "Source not reachable"
}

Я большой поклонник ожиданий, но если процесс не нуждается во взаимодействии, существуют более простые подходы.


Я забыл об обработке ошибок Tcl для команд exec: если exe c 'ed Команда возвращает ненулевое значение или, если она выдает какой-либо вывод в stderr, exe c выдаст ошибку. Путь к exe c ping:

if {[catch {exec ping -c 2 -i 3 -W 1 $1} result] != 0} {
    puts "ping returned non-zero: $result"
    if {[string first { 100.0%} $result] != -1} {
        puts "Source not reachable"
    }
}

Исчерпывающе задокументировано на вики Tcl

0 голосов
/ 26 марта 2020

Я добавил, как показано ниже, код работает нормально:

#!/usr/bin/expect
lassign $argv 1 2
spawn ping -c 2 -i 3 -W 1 $1
expect  {
   " 0%" {puts "Source is rechable!"}
   " 100.0%" {puts "Source is not rechable.Please restart IPSEC and check!";exit 1}
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...