macos bash, кажется, игнорирует elif и только первый оператор if работает как задумано - PullRequest
0 голосов
/ 04 февраля 2020

Я изо всех сил пытался понять, что я делаю здесь неправильно. Я собрал немного кода, чтобы помочь с проверкой связи с нашими серверами, который прекрасно работает, однако он выводит только погоду или не работает узел, и если у вас нет запомненной необходимости ip искать, на какой сервер он идет. Совсем недавно я решил обновить его, чтобы он выводил разные строки, если для каждого узла первый работает отлично, но для второго узла (с использованием elif) в примере кажется, что он пропускает его, заставляя сказать узел не работает.

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

Вот мой фрагмент кода:

DIR="/path/to/working/directory"
PING_SERVERS() {
tput smso
echo "`tput setaf 3` Pinging Servers... `tput setaf 7`"
tput rmso
sleep 1
#######
cat $DIR/servers.txt |  while read output
do
    ping -c 2 -t 2 "$output" > /dev/null
    if [[ "$output" == "10.5.0.13" ]] && [[ $? -eq 0 ]]; then
    echo "`tput setaf 2` node "$output" is up //Server1`tput setaf 7`"
  elif [[ "$output" == "10.5.0.30" ]] && [[ $? -eq 0 ]]; then
   echo "`tput setaf 2` node "$output" is up //Server2`tput setaf 7`"
  else
    echo "`tput setaf 1` node "$output" is down `tput setaf 7`"
    fi
done

echo " Done pinging servers"
}
PING_SERVERS

echo ""
ping -c 2 -t 2 10.5.0.13 #just to show they are up while debuging
sleep 2
echo ""
ping -c 2 -t 2 10.5.0.30 #just to show they are up while debuging
sleep 5
exit

Вот что он дает мне в терминале:

 Pinging Servers...
 node 10.5.0.13 is up //Server1
 node 10.5.1.30 is down

Done pinging servers
PING 10.5.0.13 (10.5.0.13): 56 data bytes
64 bytes from 10.5.0.13: icmp_seq=0 ttl=64 time=1.731 ms
64 bytes from 10.5.0.13: icmp_seq=1 ttl=64 time=3.382 ms

--- 10.5.0.13 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.731/2.557/3.382/0.825 ms

PING 10.5.0.30 (10.5.0.30): 56 data bytes
64 bytes from 10.5.0.30: icmp_seq=0 ttl=64 time=2.151 ms
64 bytes from 10.5.0.30: icmp_seq=1 ttl=64 time=2.783 ms

--- 10.5.0.30 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.151/2.467/2.783/0.316 ms

Любая помощь приветствуется. Jason

1 Ответ

1 голос
/ 05 февраля 2020

@ тот другой парень догадался, что мне следовало обновить, вы были правы, я все испортил, пытаясь заставить его работать, спасибо.

Вставьте сюда лицевую панель , я понял , Как оказалось, это была просто ошибка пользователя, вызванная тем, что я слишком долго смотрел на нее, делая меня go слепым к нему.

После перечитывания моего исходного поста несколько раз, пытаясь устранить неполадки, я понял второй хост elif проверял, не тот ли хост, который я пытался пропинговать в файле.

Первый хост - 10.5.0.13, поэтому я предположил, что мой второй хост, который я хотел проверить, был 10.5.0.30 и установил мой Элиф заявление, чтобы проверить это. Однако оказывается (как вы можете видеть в выводе терминала, который я разместил), это на самом деле 10.5.1.30!

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

Еще раз спасибо, Джейсон

...