Linux shell 获取内网ip 终极方法 您所在的位置:网站首页 本机当前IP地址 Linux shell 获取内网ip 终极方法

Linux shell 获取内网ip 终极方法

#Linux shell 获取内网ip 终极方法| 来源: 网络整理| 查看: 265

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 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有