采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,请问shell如何准确获取本机ip,只返回xxx.xxx.xxx.xxx字段 我目前使用的是命令 ip -4 addr show eth0| grep -Po ‘inet \K[\d.]+’ ,但是对外通信的网口名称可能使用的不是eth0,请问老师有什么解决办法吗?
是这样的,如果你有多个网卡接口,那么如果要获取到某一个特定的网卡配置的IP地址,则只能通过这种方式来获取,必须明确知道某个网卡的接口名称,这是肯定的。另一种情形下,如果你网卡配置了多个IP,但在/etc/hosts下配置的通常只有一个IP到主机名的映射,这个IP通常是业务iP,可以通过hostname -i获取到
老师,我又尝试了一下,方案如下,您觉得可行吗? #我发现用于对外的网口设备都会带上<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>去进行过滤这个方案可行吗?
这个没问题,但问题是你能确定主机上只有一块网卡吗?如果存在多块的情形,你这样做就获取不到,如果只有1块,那么是没问题的
如果存在多块,就只会获取排在最上面的那块网卡的ip,但我不知道如果多个ip都带上了<BROADCAST,MULTICAST,UP,LOWER_UP>标记,它们就都能用于网络通信吗?
登录后可查看更多问答,登录/注册
30%知识讲解+70%实例操作 掌握Shell脚本编程能力
1.1k 15
8.1k 11
1.5k 6
846 6
923 6