脚本:

脚本:

有人能解释一下这个脚本是如何工作的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

相关内容