6

В Windows вы можете пропинговать данное доменное имя и записать IP-адрес как переменную, даже если ответ не получен. Я считаю, что команда выглядела примерно так:

ping domain.com
for /f "tokens=1,2 delims=[]" %%A in ('ping /n 1 /w 1 domain.com ^| find "Pinging"') do set ipaddress=%%B"`

Это в основном то, что я пытаюсь сделать, но в сценарии bash, а не в командном файле. Я наткнулся на множество вопросов, которые действительно близки, но не совсем то, что я ищу. Кажется, я не могу придумать лучший способ сделать это.

Есть идеи?

1 ответ1

11

Это должно работать, из командной строки или в сценарии:

ip=$(ping -c 1 www.google.com | gawk -F'[()]' '/PING/{print $2}')
echo $ip
173.194.34.19

ОБЪЯСНЕНИЕ

Сначала анализируется команда ping :

$ ping -c 1 www.google.com
PING www.google.com (173.194.40.209) 56(84) bytes of data.
64 bytes from par10s12-in-f17.1e100.net (173.194.40.209): icmp_req=1 ttl=52 time=49.8 ms

--- www.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 49.874/49.874/49.874/0.000 ms
  • ip=$(COMMAND) : назначить вывод команды COMMAND переменной $ip .
  • ping -c 1 www.google.com : ping google, один раз.
  • gawk - это мощный скриптовый язык, который обрабатывает входные данные построчно и поля за полем.
  • -F'[()]' : -F устанавливает разделитель (и) поля gawk . Здесь мы устанавливаем класс символов ([ ]), в частности, чтобы открывать и закрывать скобки. Это означает, что все до первого ) или ( будет первое поле, которое в gawk составляет $1 . Нас интересует только первая строка, поэтому мы говорим gawk напечатать 2-е поле ($2), которое является IP, только если текущая строка содержит "PING" (/PING/).

Таким образом, результаты всего шебанга сохраняются в виде ip который затем можно назвать $ip .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .