用Bash解析ifconfig以获取当前IP地址(wifi或以太网)

3

我正在尝试使用bash脚本输出当前IP地址。我正在努力理解awk并且已经完成了以下操作:

/sbin/ifconfig $1 | grep "inet" | awk '$1 == "inet" {gsub(/\/.$/, "", $2); print $2}'

这将产生如下输出:

127.0.0.1
192.168.178.57

我现在有两个问题:首先,127.0.0.1 没有用,我该如何摆脱它? 其次,192.168.178.57 是我的Wi-Fi连接的IP地址。但是我想让脚本能够获取当前正在使用的Wi-Fi或以太网的IP地址。 可以在此处找到 /sbin/ifconfig 的示例输出。

4个回答

5
您可以使用这个 awk 脚本:
awk '/inet / && $2 != "127.0.0.1"{print $2}' <(ifconfig)

1

获取计算机当前使用的IP的最佳方法。

ip route get 8.8.8.8 | awk '{print $NF;exit}'
192.168.1.30

旧版本。不要使用!!!!

请查看我的回复: Linux bash脚本提取IP地址


抱歉,我忘记提到我在使用OSX操作系统。 - doque
@doque 那里没有 ip route 吗? - Jotne
似乎不是这样:~ » ip route zsh: command not found: ip - doque
如果我搜索“ip route get”和“osx”,我会得到很多相关的帖子。但是我没有看到任何一个说它不起作用的。 - Jotne
@Mehdi 这是一个非常古老的帖子。在这里看到更好的解决方案:https://dev59.com/mGEi5IYBdhLWcg3wYLaT#21336679 - Jotne

0
我建议您使用ip命令而不是ifconfig,因为ip是“未来”的选择,与ifconfig相比更加可靠。
$ ip addr show dev $(ip route ls|awk '/default/ {print $5}')|grep -Po 'inet \K(\d{1,3}\.?){4}'
10.251.26.9

这里的一行代码将使用 ip route ls 命令来查找默认接口,并根据接口 ID 获取该接口的 IP 地址。

这里的 grep 命令使用正则表达式安全地获取 IP 地址。


0

如果您不介意安装一些东西,或者已经安装了Node,请尝试使用sindresorhus/internal-ip

$ npm install --global internal-ip
$ internal-ip
192.168.0.2

优点:跨平台

注:我知道它不是bash,也不使用ifconfig,但我在寻找一个通用工具,可以在任何地方使用,也许它能帮助其他人。


你也可以使用 public-ip-cli 获取你的公共 IP。 - fregante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接