使用 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"`
Run Code Online (Sandbox Code Playgroud)
这基本上就是我想要做的,但是在 bash 脚本而不是批处理文件中。我偶然发现了很多非常接近的问题,但并不是我想要的。我似乎无法找出解决此问题的最佳方法。
有任何想法吗?
ter*_*don 14
这应该可以从命令行或脚本中工作:
ip=$(ping -c 1 www.google.com | gawk -F'[()]' '/PING/{print $2}')
echo $ip
173.194.34.19
Run Code Online (Sandbox Code Playgroud)
解释
首先是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
Run Code Online (Sandbox Code Playgroud)
ip=$(COMMAND): 将 的输出分配给COMMAND变量$ip。ping -c 1 www.google.com : ping google,一次。gawk 是一种强大的脚本语言,可以逐行处理输入,逐字段处理。 -F'[()]':-F设置gawk字段分隔符。在这里,我们将其设置为字符类 ( [ ]),专门用于打开和关闭括号。这意味着直到第一个)或(将是第一个字段的所有内容gawk都是$1. 我们只对第一行感兴趣,所以我们告诉gawk打印第二个字段 ( $2),即 IP,仅当当前行包含“PING” ( /PING/) 时。因此,整个shebang的结果都保存为ip,然后您可以将其引用为$ip。
| 归档时间: |
|
| 查看次数: |
9494 次 |
| 最近记录: |