Linux shell 获取内网ip 终极方法
shell 获得本机ip 获得内网ipmachine_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 ge
·
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
更多推荐
已为社区贡献1条内容
所有评论(0)