使用 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
$1
gawk
$2
仅有的如果当前行包含“PING”(/PING/
)。
因此,整个过程的结果将保存为,ip
您可以将其引用为$ip
。