Использование traceroute в операторе if в bash-скрипте - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь выполнить код в зависимости от того, получает ли traceroute ответ с определенного IP-адреса.Итак:

if traceroute 123.456.78.9
then
   option 1
else
   option 2

Моя проблема заключается в том, что независимо от того, получаю ли я ответ с IP-адреса или нет, всегда выполняется вариант 1.

Я пробовал использовать «пинг» вместоtraceroute, и это работает, но у меня нет возможности использовать ping в конечном коде.

Подробнее:

  1. Работает на QNX OS
  2. Успех определяется ответом хоста, а отказ - отсутствием ответа хоста
  3. Вывод успеха:

    traceroute to 123.456.78.9 (123.456.78.9), 1 hops max, 40 byte packets
     1  123.456.78.9 (123.456.78.9)  0.000 ms  1.000 ms  0.000 ms
    
  4. Ошибка вывода:

    traceroute to 123.456.78.90 (123.456.78.90), 1 hops max, 40 byte packets
     1  *
    

1 Ответ

0 голосов
/ 03 октября 2018

Проблема в том, что traceroute всегда выводит выходные данные, даже если нет действительного хоста, поэтому сначала необходимо проверить правильность ответов

Необходимо проверить, получен ли верный ответ или нет

Попробуйте использовать

n=`traceroute 123.456.78.9|grep ms|wc|sed 's/ //g' |cut -d ' ' -f 1`

if [ $n -eq 0 ]                                                         
then
    echo 'failed'
else
    echo 'success'
fi
...