Ping Test If-else case - PullRequest
       47

Ping Test If-else case

0 голосов
/ 01 августа 2020

Я хочу отобразить «Устройство 1 в сети» или «Устройство 1 в автономном режиме» на основе проверки связи в сценарии оболочки. Однако я не могу найти флаг или способ извлечь текст из результатов теста ping, чтобы использовать его с оператором if-case для получения желаемого результата.

    read -p "Enter the number of Units: " x
    for ((i=1; i<=$x; i++))
    do
        ping -c1 a.b.c."$i"
        if ping=success
            echo "Unit "$i" is online"
        else
            echo "Unit "$i" is offline"
        fi
    done

1 Ответ

1 голос
/ 01 августа 2020

Если вы используете стандартный инструмент GNU / Linux ping, то в руководстве указано :

Если ping не получает никаких ответных пакетов, он завершится с кодом 1. Если заданы и количество пакетов, и крайний срок, и к моменту наступления крайнего срока получено меньше, чем количество пакетов, он также выйдет с кодом 1. При другой ошибке он выйдет с кодом 2. В противном случае он завершается с кодом 0. Это позволяет использовать код выхода, чтобы узнать, жив ли хост или нет.

Это означает, что вы можете захватить код выхода из команды в оболочке и включить который. Для bash:

if ping -c1 192.168.1."$i" ; then
    echo "Unit ${i} is online"
else
    echo "Unit ${i} is offline"
fi

Или как однострочный, используя || и &&:

ping -c 192.168.1."$i" && echo "Unit ${i} is online" || echo "Unit ${i} is offline"
...