我试图通过shell脚本找到我自己系统的ip-address并写入我脚本内容的文本
#!/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
答案 0 :(得分:14)
让我们先清理你的代码。当你已经使用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
答案 1 :(得分:9)
这是获取IP地址的好方法。这为您提供了在测试时到达互联网的地址,因此即使您从Wifi更改为eth或任何其他IF类型,它也会为您提供正确的IP。
在此处查看更详细的帖子:Linux bash script to extract IP address
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=" ")