如何使用脚本显示 eth0 上显示的 IP 地址?
答案1
为了提供另一种选择,您可以使用ip addr
以下命令来获取 IP 地址:
ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1
ip addr show eth0
显示有关的信息eth0
grep "inet\b"
仅显示包含 IPv4 地址的行(如果您想要 IPv6 地址,请将其更改为"inet6\b"
)awk '{print $2}'
打印第二个字段,其中包含 ipaddress/mask,例如172.20.20.15/25
cut -d/ -f1
仅占用IP地址部分。
在脚本中:
#!/bin/bash
theIPaddress=$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)
答案2
注意:此答案适用于较旧的系统。如果这对您不起作用,请考虑其他答案。这个答案并不正确。
将其保存在文件中然后运行bash <filename>
#!/bin/bash
ifconfig eth0 | grep "inet addr"
更准确地说,只获取显示 IP 地址的数字:
#!/bin/bash
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1
更新:如果这对你不起作用,请尝试其他答案
更新:对于 Ubuntu 18+,请尝试:(不要忘记eth0
用您需要 IP 的接口替换。感谢@ignacio)
ifconfig eth0 | grep "inet " | awk '{print $2}'
答案3
取自https://stackoverflow.com/a/14910952/1695680
hostname -i
但是这可能会返回本地 IP 地址 (127.0.0.1),因此您可能必须使用并过滤:
hostname -I
来自主机名的手册页:
-i, --ip-address
显示主机名的网络地址。请注意,这仅在主机名可解析时才有效。避免使用此选项;改用 hostname --all-ip-addresses。
-I, --all-ip-addresses
显示主机的所有网络地址。此选项枚举所有网络接口上配置的所有地址。省略了环回接口和 IPv6 链路本地地址。与选项 -i 相反,此选项不依赖于名称解析。不要对输出的顺序做任何假设。
答案4
@markus-lindberg 的回复是我最喜欢的。如果你添加-o -4
到 ip 的标志,那么你会得到一个更容易解析(和一致)的输出:
ip -o -4 a | awk '$2 == "eth0" { gsub(/\/.*/, "", $4); print $4 }'
-o
代表--oneline
,旨在帮助解决此类情况。-4
添加 以限制 IPv4 地址,这是所有其他响应所暗示的。