Linux shell 获取内网ip 终极方法

shell 获得本机ip 获得内网ip

machine_physics_net=$(ls /sys/class/net/ | grep -v "`ls /sys/devices/virtual/net/`");
local_ip=$(ip addr | grep "$machine_physics_net" | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}');

初级版

在部署的时候需要获取内网IP

ip addr | awk '/^[0-9]+: / {}; /inet.*global.*eth/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}'

在这里插入图片描述
效果不错,但是这个只能搜索网卡前缀是eth,在别的环境下行不通,在新环境中发现网卡前缀为ens

傻瓜版

这样简单判断一下

local_ip_eth0=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global.*eth/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
local_ip_ens33=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global.*ens/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
if [ -n "$local_ip_eth0" ];then
    local_ip="$local_ip_eth0"
else
    local_ip="$local_ip_ens33"
fi

终极版

但是后面又在新环境,发现网卡前缀为ena,且还有很多虚拟网卡。
最后方法为找到所有物理网卡,然后再在ip addr中找到IP

machine_physics_net=$(ls /sys/class/net/ | grep -v "`ls /sys/devices/virtual/net/`");
local_ip=$(ip addr | grep "$machine_physics_net" | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}');

如果有多张网卡,并且绑定多个网卡绑定了ip,则视情况选择,我选择了第一个,命令head -1最终的脚本代码如下:

获得物理网卡
machine_physics_net=$(ls /sys/class/net/ | grep -v "`ls /sys/devices/virtual/net/`");
#先过滤网卡,在查找IP,不要再awk中过滤网卡
local_ip=$(ip addr | grep $machine_physics_net | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | head -1);
echo $local_ip;

Debian-x86结果
在这里插入图片描述
UOS-ARM 64
在这里插入图片描述

CentOS-ARM
在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值