我有一个应用程序需要您输入您的 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
答案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