Скрипт Linux для проверки, есть ли у DNS тот же IP, что и у следующего за ним в том же списке

#linux #bash #shell #awk

#linux #bash #оболочка #awk

Вопрос:

У меня есть список DNS и IP-адресов в этом формате:

DNS IP

DNS IP

DNS IP

И мне нужно выполнить скрипт, который выполняет dig short DNS и проверяет, имеет ли он тот же IP, что и следующий за ним, и это со всем документом. Идея в том, что если он совпадает, он возвращает сообщение типа $DNS and $IP match , если они совпадают, или сообщение об ошибке, если они не совпадают.

Я пробовал с awk '{ DDD=$(dig short $1); if ( $DDD == $2 ); then; print "'$DDD' and '$2' match."; fi }' all.log

Но результат:

(пробел) и (пробел) совпадают.

(пробел) и (пробел) совпадают.

(пробел) и (пробел) совпадают.

Комментарии:

1. Это не ответ на ваш вопрос, но за последние годы я создал несколько bash-скриптов. Я уверен, что это возможно с bash, но я также думаю, что это немного сложно для него. Я бы сделал это с помощью perl. Я думаю, у вас есть лучшая механика для этого. И я также думаю, что perl есть где угодно в современных системах Linux.

2. Кажется, вы смешиваете awk и bash синтаксис. Пример чтения значений из файла см. в mywiki. wooledge.org/BashFAQ /…

Ответ №1:

Вот простой ответ, использующий только bash:

 while read DNS IP; do
  DDD=$(dig  short "$DNS")
  if [ "$DDD" = "$IP" ]; then
    echo "'$DDD' and '$IP' match."
  else
    echo "'$DDD' and '$IP' do not match."
  fi
done < all.log
  

Имейте в виду, что dig short NAME команда может вернуть в результате более одной строки, и в этом случае скрипт работать не будет…

Комментарии:

1. @EdMorton: спасибо, исправил мой ответ, теперь намного лучше… Спасибо за ваше предложение, я не знал об этом синтаксисе чтения bash … 🙂