有人能解释一下这个脚本是如何工作的dig
以及+short
为什么使用它们吗?还有人能解释一下命令替换在代码中是如何工作的吗?因为我很难理解命令替换是如何工作的。
脚本:
#!/bin/bash
echo "Enter web address : "
read address
echo "Entered web address : $address"
nslookup "$address"
ping -c 4 $(dig +short "$address" | head -1)
正在使用的脚本:
Enter web address :
gutenberg.org
Entered web address : gutenberg.org
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: gutenberg.org
Address: 152.19.134.47
PING 152.19.134.47 (152.19.134.47) 56(84) bytes of data.
64 bytes from 152.19.134.47: icmp_seq=1 ttl=47 time=118 ms
64 bytes from 152.19.134.47: icmp_seq=2 ttl=47 time=165 ms
64 bytes from 152.19.134.47: icmp_seq=3 ttl=47 time=116 ms
64 bytes from 152.19.134.47: icmp_seq=4 ttl=47 time=111 ms
--- 152.19.134.47 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 111.326/127.824/165.079/21.675 ms
enter code here
enter code here
答案1
因此我们从脚本中取出以下一行:
ping -c 4 $(dig +short "$address" | head -1)
shell 会将其拆分为空格,替换变量,然后发现需要先运行里面的命令$()
。因此,它必须先运行这个:
dig +short "$address" | head -1
双引号$address
并不是必需的,但养成这个好习惯是必要的,因为万一您的数据中带有空格,shell 将不会为您将其拆分。
所以如果我用...来做这件事$address="yahoo.com"
....
$ dig +short yahoo.com | head -1
72.30.35.10
使用72.30.35.10
作为命令替换内部管道的输出,从顶部开始的行变为
ping -c 4 72.30.35.10
它会在退出之前仅 ping IP 4 次,就像您在尝试时遇到的情况一样。否则,它ping
会一直运行,直到您遇到ctrl- c。
答案2
ping -c 4
:4 个步骤
head -1 :
仅显示第一行输出
dig +short 仅显示“A”记录
mirek@Mirek-nuc:~$ dig yahoo.com +short
72.30.35.9
98.137.246.7
72.30.35.10
98.138.219.231
98.138.219.232
98.137.246.8