繁体   English   中英

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

[英]find ip address of my system for a particular interface with shell script (bash)

我试图通过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 

让我们先清理你的代码。 当你已经使用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=" ")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM