如何通过 bash 脚本获取 ip 地址?

如何通过 bash 脚本获取 ip 地址?

我有一个应用程序需要您输入您的 IP 地址作为参数,如何使用 Bash 脚本自动获取 IP 地址并将其作为程序的参数输入?

答案1

请注意,这可以输出多个地址,因为“多年来,“地址”已不一定正确。

Linux

使用 iproute2 和 awk:

ip addr show scope global | awk '$1 ~ /^inet/ {print $2}'
ip -4 addr show scope global | awk '$1 == "inet" {print $2}'
ip -6 addr show scope global | awk '$1 == "inet6" {print $2}'

使用 iproute2 最新的 JSON 支持:

ip -json addr show scope global | jq -r '.[] | .addr_info | .[] | .local'
ip -json -4 addr show scope global | jq -r '.[] | .addr_info | .[] | .local'
ip -json -6 addr show scope global | jq -r '.[] | .addr_info | .[] | .local'

ip -json addr | jq -r '.[] | .addr_info | .[] | select(.scope == "global") | .local'
ip -json addr | jq -r '.[] | .addr_info | .[] | select(.family == "inet" and .scope == "global") | .local'
ip -json addr | jq -r '.[] | .addr_info | .[] | select(.family == "inet6" and .scope == "global") | .local'

FreeBSD

使用 FreeBSD ifconfig 和 awk(这里按范围过滤有点困难):

ifconfig -a | awk '$1 ~ /^inet/ {print $2}'
ifconfig -a | awk '$1 == "inet" {print $2}'

另请注意是否配置在不同的操作系统之间有许多不同的输出样式 – 即使是 Linux 也至少有三个版本。

答案2

要不就:

ipaddr=$(ifconfig wlan0 | awk '/inet addr:/ {gsub("addr:","",$2); print $2}')

答案3

如果你可以安装moreutils然后使用ifdata

ifdataifconfig- 无需解析输出即可获取网络接口信息

[…]

-pa
打印接口的 IPv4 地址。

例子:

ifdata -pa wlan0            # print the address
ipaddr=$(ifdata -pa wlan0)  # assign to variable

答案4

在查找“将 IP 地址放入 bash 变量。有没有更好的方法?”的答案后,我设法找到了答案。

它只需要进行一点小调整,将 ifconfig 改为 ifconfig wlan0。然后我不得不使用反引号将其插入变量。

所以我设法开始使用代码

ipAddr = "$(ifconfig wlan0 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }')"
./myApp $ipAddr

相关内容