Meh*_*dad 3 command-line scripts environment-variables
我想编写一个脚本来将连接到“eth0”等接口的设备的 IP 地址设置为变量。我可以通过以下命令获取 IP 地址:
arp -i eth0 -a
Run Code Online (Sandbox Code Playgroud)
上面命令的输出是:
? (10.42.0.38) at b8:27:eb:07:5d:60 [ether] on eth0
Run Code Online (Sandbox Code Playgroud)
我想向.bashrc
文件添加一个脚本,以将上述命令的输出中的 IP 地址设置为变量$RASPBERRY_IP
,并在其他脚本中使用它。知道怎么做吗?
arp
操作内核 ARP 缓存中的条目,您可能会得到很多条目(取决于 LAN 的大小)。由于您只对 IP 地址感兴趣,因此您应该使用该-n
选项,以便首先arp
显示数字地址而不是主机名。
此外,您通常会根据 LAN 的大小获得大量 IP 地址,因此您可能应该使用数组而不是变量来存储 IP 地址。
以下命令从arp
缓存中取出 IP 地址并将它们放入数组addrs
:
addrs=( $(arp -ni eth0 | grep -o '^[0-9][^ ]*') )
Run Code Online (Sandbox Code Playgroud)
这是一个例子:
$ addrs=( $(arp -ni eth0 | grep -o '^[0-9][^ ]*') )
$ echo "${addrs[0]}" ## First IP
192.168.2.27
$ echo "${addrs[2]}" ## Second IP
192.168.1.1
$ echo "${#addrs[@]}" ## Number of IP addresses
37
Run Code Online (Sandbox Code Playgroud)
你也可以使用sed
:
addrs=( $(arp -ni eth0 | sed -nr 's/^([0-9][^ ]*).*/\1/p') )
Run Code Online (Sandbox Code Playgroud)
IP 地址将显示在第一列中,我们通过 提取第一列[0-9][^ ]*
。^[0-9]
这是为了确保该行以数字开头,以便从输出中丢弃包含标题的第一行。
另一方面,如果您只有一个条目,则可以将其保存在变量中:
addr="$(arp -ni eth0 | grep -o '^[0-9][^ ]*')"
Run Code Online (Sandbox Code Playgroud)
或者
addr="$(arp -ni eth0 | sed -nr 's/^([0-9][^ ]*).*/\1/p')"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2453 次 |
最近记录: |