关于macos:使用Bash解析ifconfig以获取当前IP地址(WiFi或以太网)

Parse ifconfig with Bash to get current IP address (wifi or ethernet)

我正在尝试使用bash脚本输出当前的IP地址。我正在尝试将我的头缠在awk上,并管理以下内容:

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

输出:

1
2
127.0.0.1
192.168.178.57

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


您可以使用以下awk脚本:

1
awk '/inet / && $2 !="127.0.0.1"{print $2}' <(ifconfig)

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

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

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

请参阅我对此信息的回复:
Linux bash脚本提取IP地址


如果您不介意安装某些东西和/或如果您已经拥有节点,请尝试sindresorhus / internal-ip

1
2
3
$ npm install --global internal-ip
$ internal-ip
192.168.0.2

专业版:跨平台

注意:我知道它不是bash,并且它不使用ifconfig,但是我到这里来的是寻找可以在任何地方使用的通用工具,也许它可以帮助其他人。


我建议您使用ip命令而不是ifconfig,因为与ifconfig相比,ip是"未来"并且更可靠。

1
2
$ 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的oneliner,它将根据该接口的IP地址进行grep。

此处grep命令使用正则表达式安全地获取IP地址。