使用shell脚本(bash)查找特定接口的系统IP地址



我正在尝试通过shell脚本找到我自己系统的IP地址,并写入我的脚本内容的文本

#!/bin/bash
wifiip=$(ip addr | grep inet | grep wlan0 | awk -F" " '{print $2}'| sed -e 's//.*$//')
eth0ip=$(ip addr | grep inet | grep eth0 | awk -F" " '{print $2}' | sed -e 's//.*$//')
if [ "$eth0ip" == "0" ]; then
    echo "$eth0ip" | grep [0-9]$ > /home/pi/att/ip.txt
else 
    echo "$wifiip" | grep [0-9]$ > /home/pi/att/ip.txt
fi

并尝试做一些事情,例如如果一个接口没有在 IP 中打印另一个 IP.txt

但它给了

ip.sh: 14: [: unexpected operator 

让我们先清理一下你的代码。当您已经在使用 awk 时,您不需要十几个不同命令和管道的链。这:

wifiip=$(ip addr | grep inet | grep wlan0 | awk -F" " '{print $2}'| sed -e 's//.*$//')

可以简单地写成这样:

wifiip=$(ip addr | awk '/inet/ && /wlan0/{sub(//.*$/,"",$2); print $2}')

但是您的整个脚本可以编写为一个 awk 命令。

我需要你用 ip addr 命令的一些示例输出来更新你的问题,你想要从给定该输入的 awk 命令输出,并更清楚地解释你试图做什么,以便向你展示正确的编写方法,但它可能是这样的:

ip addr | awk '
/inet/ { ip[$NF] = $2; sub(//.*$/,"",ip[$NF]) }
END { print ( "eth0" in ip ? ip["eth0"] : ip["wlan0"] ) }
' > /home/pi/att/ip.txt

这是获取IP地址的好方法。 这为您提供了用于在测试中访问互联网的地址,因此即使您从 Wifi 更改为 eth 或任何其他 IF 类型,它也会为您提供正确的 IP。

在此处查看更详细的帖子:用于提取 IP 地址的 Linux bash 脚本

my_ip=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}')

要获取接口名称:

my_if=$(ip route get 8.8.8.8 | awk '/dev/ {f=NR} f&&NR-1==f' RS=" ")

最新更新