请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问shell如何准确获取本机ip

老师,请问shell如何准确获取本机ip,只返回xxx.xxx.xxx.xxx字段
我目前使用的是命令 ip -4 addr show eth0| grep -Po ‘inet \K[\d.]+’ ,但是对外通信的网口名称可能使用的不是eth0,请问老师有什么解决办法吗?

正在回答

1回答

是这样的,如果你有多个网卡接口,那么如果要获取到某一个特定的网卡配置的IP地址,则只能通过这种方式来获取,必须明确知道某个网卡的接口名称,这是肯定的。另一种情形下,如果你网卡配置了多个IP,但在/etc/hosts下配置的通常只有一个IP到主机名的映射,这个IP通常是业务iP,可以通过hostname -i获取到https://img1.sycdn.imooc.com//szimg/5da689c9084ffbad15001500.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 Max_Cooper #1
    老师,我又尝试了一下,方案如下,您觉得可行吗?
    #我发现用于对外的网口设备都会带上<BROADCAST,MULTICAST,UP,LOWER_UP>这个标记,就用这个过滤,但此处可能会过滤出多个。
    net_device=`ip -4 addr | grep '<BROADCAST,MULTICAST,UP,LOWER_UP>' | awk '{print $2}'`
    #只保留第一个网卡设备的名称,并把第一个设备冒号及之后的字符去掉
    net_device=${net_device%%:*}
    #获取该网卡设备的ip
    ip -4 addr show ${net_device}: |grep -Po 'inet \K[\d.]+'
    
    根据<BROADCAST,MULTICAST,UP,LOWER_UP>去进行过滤这个方案可行吗?
    回复 有任何疑惑可以回复我~ 2019-10-16 11:36:58
  • 酷田 #2
    这个没问题,但问题是你能确定主机上只有一块网卡吗?如果存在多块的情形,你这样做就获取不到,如果只有1块,那么是没问题的
    回复 有任何疑惑可以回复我~ 2019-10-16 11:44:32
  • 提问者 Max_Cooper 回复 酷田 #3
    如果存在多块,就只会获取排在最上面的那块网卡的ip,但我不知道如果多个ip都带上了<BROADCAST,MULTICAST,UP,LOWER_UP>标记,它们就都能用于网络通信吗?
    回复 有任何疑惑可以回复我~ 2019-10-16 11:52:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信