Выполните пинг-анализ списка имен хостов из файла и разрешите его по IP с помощью Cisco APIC Bash. - PullRequest
0 голосов
/ 07 мая 2019

Я читал о нескольких решениях для преобразования имен хостов в IP-адрес в сценарии Bash с использованием либо dig, getent, host, and nslookup, к сожалению, ни один из этих инструментов не может преобразовать имя хоста в IP-адрес в Cisco APIC bash.

https://unix.stackexchange.com/a/20793/349707

Единственный инструмент, работающий для этой цели - ping.

С помощью этого скрипта я смог определить, работает ли хост или нет. Однако я не могу получить IP-адрес в выводе.

user@CiscoAPIC> cat script01.sh
#!/bin/bash
date
cat host.txt |  while read h
do
    ping -c 1 "$h" > /dev/null
    if [ $? -eq 0 ]; then
                echo "$h is up"
    else
                echo "$h is down"
    fi
done
user@CiscoAPIC>

Вывод для script1.sh

user@CiscoAPIC> ./script1.sh
Mon May  6 10:14:20 UTC 2019
Nexus01 is down
Nexus02 is up
user@CiscoAPIC>

Понимая, что при использовании > /dev/null IP не создается, я удалил его на script2.sh

user@CiscoAPIC> cat script2.sh
#!/bin/bash
date
cat host.txt |  while read h
do
    ping -c 1 "$h"
    if [ $? -eq 0 ]; then
                echo "$h is up"
    else
                echo "$h is down"
    fi
done
user@CiscoAPIC>

К сожалению, слишком много ненужных выходных данных.

user@CiscoAPIC> ./script2.sh
Mon May  6 10:15:27 UTC 2019
PING Nexus01 (10.1.1.1) 56(84) bytes of data.

--- Nexus01 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

Nexus01 is down
PING Nexus02 (10.1.1.2) 56(84) bytes of data.
64 bytes from Nexus02 (10.1.1.2): icmp_seq=1 ttl=64 time=0.132 ms

--- Nexus02 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.132/0.132/0.132/0.000 ms
Nexus02 is up
user@CiscoAPIC>

Затем я добавил | head -1 | cut -d ' ' -f3 | tr -d '()', чтобы удалить ненужные, но окончательный вывод не так хорош.

user@CiscoAPIC> cat script3.sh
#!/bin/bash
date
cat host.txt |  while read h
do
    ping -c 1 "$h" | head -1 | cut -d ' ' -f3 | tr -d '()'
    if [ $? -eq 0 ]; then
                echo "$h is up"
    else
                echo "$h is down"
    fi
done
user@CiscoAPIC>

Вывод для script3.sh

user@CiscoAPIC> ./script3.sh
Mon May  6 10:17:42 UTC 2019
10.1.1.1
Nexus01 is down
10.1.1.2
Nexus02 is up
user@CiscoAPIC>

Пожалуйста, дайте мне знать, что является лучшим решением для получения следующего вывода на Bash только с помощью ping, так как другие инструменты не работают должным образом в этой конкретной системе.

Желаемый выход

Mon May  6 10:17:42 UTC 2019

Nexus01 - 10.1.1.1 is down
Nexus02 - 10.1.1.2 is up

1 Ответ

0 голосов
/ 29 мая 2019

Просто проверьте возвращаемое значение ping и перенаправьте его вывод в /dev/null.

cat host.txt | while read h
do
    if ping -c 1 "$h" >/dev/null; then
                echo "$h is up"
    else
                echo "$h is down"
    fi
done

Все | head -1 | cut -d ' ' -f3 | tr -d '()' не нужно - вы вообще не заинтересованы в выводе.Также обратите внимание, что обычно состояние выхода конвейера - это состояние выхода команды крайний правый , в вашем случае tr -d '()' (ну, если только для ex bash не установлено pipefail) Если вы хотите выйти из ping, проверьте только ping.

...