用shell脚本(bash)find我系统的ip地址,

我试图通过shell脚本find我自己的系统的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.txt中的另一个IP

但它的给予

 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。

在这里看到更详细的帖子: Linux bash脚本提取IP地址

 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=" ")