NSLookup awk к файлу, показываю «Ответ»

-d не имеет особых свойств, поэтому отключать нечего.

Как упоминал cuonglm, вы видите ошибку из-за неправильного цитирования переменной $ argv [1] , а не из-за какого-то воображаемого специального свойства -d . Вот доказательство:

$ csh 
% if ( "-d" == "-d" ) echo true
true
% if ( -d == "-d" ) echo true
if: Missing file name.
2
01.06.2018, 20:57
1 ответ

Если вы хотите просто составить таблицу имен хостов и IP-адресов, и вам не особо важно использовать nslookup, я, по-видимому, смог создать желаемый результат с помощью быстрого for.. echoцикла :

. ]
for h in $( cat hosts.list ); do
    a=$(dig +short $h | head -n1)
    echo -e "$h\t${a:-Did_Not_Resolve}"
done

digявляется немного более дружественным -к -DNS-инструментом для сценариев, чем nslookup, использование опции +shortделает вывод еще чище. Вывод запроса, для которого нет записи, представляет собой пустую строку, поэтому я использую встроенное -в bashрасширение параметра по умолчанию(${var:-default})для обработки случая отсутствия записи, дающего ответ «по умолчанию» Did_Not_Resolve. ].

$ dig www.example.com

; <<>> DiG 9.10.6 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23579
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;www.example.com.       IN  A

;; ANSWER SECTION:
www.example.com.    20308   IN  A   93.184.216.34

;; Query time: 28 msec
;; SERVER: 172.28.8.1#53(172.28.8.1)
;; WHEN: Fri Jun 01 12:02:27 MST 2018
;; MSG SIZE  rcvd: 60

$ dig +short www.example.com
93.184.216.34

Окончательный выход – это выход:

www.example.com 93.184.216.34
www.google.com  172.217.14.68
host.doesnotexist.tld   Did_Not_Resolve
unix.stackexchange.com  151.101.129.69

Альтернативой digтакже являетсяhost:

$ for h in $(cat hosts.list); do host $h; done
www.example.com has address 93.184.216.34
www.example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
www.google.com has address 216.58.193.196
www.google.com has IPv6 address 2607:f8b0:4007:80d::2004
Host host.doesnotexist.tld not found: 3(NXDOMAIN)
unix.stackexchange.com has address 151.101.129.69
unix.stackexchange.com has address 151.101.1.69
unix.stackexchange.com has address 151.101.65.69
unix.stackexchange.com has address 151.101.193.69

В ответ на вопросы в комментарии ниже:

Единственная опция, которую я использую для dig, — это +short, которая уменьшает вывод либо до IP-адреса данного хоста, либо до пустой строки в противном случае. Я запускаю digв подоболочке ($( dig [...] )), потому что я фиксирую его вывод и присваиваю его переменнойa(для «адреса» ). Я передаю вывод digчерез head -n1, так как некоторые хосты (, такие как хост unix.stackexchange.com, возвращают несколько IP-адресов; для простоты я просто беру первый.

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

Расширение в соответствии с запросом на оператор echo, в частности:

echo -e "$h\t${a:-Did_Not_Resolve}"
  • Переключатель -eуказывает echo, что я буду использовать e скейп-последовательности. В этом случае я использую \t, который в сочетании с -eстановится Tab , а не буквальным экранированием t.
  • $h, как и следовало ожидать, просто заменяется содержимым переменной h.
  • \t, как объяснялось ранее, становится Tab.
  • ${a:-Did_Not_Resolve}. Ах, вот где волшебство.bashимеет возможность при расширении параметров проводить небольшой самоанализ как часть процесса. Синтаксис ${var:-default}расширяется до содержимого переменнойvarили , если она либо не установлена, либо равна нулю, предоставленная замена (в этом примере default; или в реальном случае использования здесьDid_Not_Resolve). Вы можете найти более подробную информацию об этом на странице руководства bash, в разделе «Расширение параметров».

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

1
27.01.2020, 22:18

Теги

Похожие вопросы