#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 … 🙂