在 Linux 上 Ping 服务器/域并捕获其 IP

在 Linux 上 Ping 服务器/域并捕获其 IP

使用 Windows,您可以 ping 给定的域名并将 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

这应该可以工作,从命令行或脚本中:

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的字段分隔符。在这里,我们将其设置为字符类 ( [ ]),具体来说就是打开和关闭括号。这意味着直到第一个)或的所有内容都将是(中的第一个字段。我们只对第一行感兴趣,所以我们告诉打印第二个字段 ( ),即 IP,gawk$1gawk$2仅有的如果当前行包含“PING”(/PING/)。

因此,整个过程的结果将保存为,ip您可以将其引用为$ip

相关内容