如何使用 shell 脚本显示 eth0 接口的 IP 地址?

如何使用 shell 脚本显示 eth0 接口的 IP 地址?

如何使用脚本显示 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 地址,这是所有其他响应所暗示的。

相关内容