使用 bash 在 Linux 中获取子网掩码

Get Subnet mask in Linux using bash

我正在使用 bash 通过该脚本获取我机器的 IP 地址:

_MyGW="$( ip route get 8.8.8.8 | awk 'N=3 {print $N}' )"

现在我正在尝试获取这种类型的子网掩码:

192.168.1.0/24 

但我不知道该怎么做。

有几种方法可以实现这一点:

首先:要以 255.255.255.0 格式打印掩码,您可以使用:

/sbin/ifconfig wlan0 | awk '/Mask:/{ print ;} '

其次:我们可以使用ip命令获取格式为192.168.1.1/24的掩码

ip -o -f inet addr show | awk '/scope global/ {print }'

更好的方法是:

 ifconfig eth0 | awk '/netmask/{split(,a,":"); print a[1]}'

您可以将 eth0 替换为您想要的任何其他接口

对我来说,一个简单的方法是:

IP=$(ifconfig eth0 | grep -w inet | cut -d" " -f10) # device IP, e.g. 11.1.1.43
IP_RANGE=$(echo $IP | cut -d"." -f1-3).0/24 # subnet 11.1.1.0/24

ifconfig显示的正确界面替换课程eth0

这就是我通过 bash/awk:

获取 IP 和子网掩码的方式
IFCONFIG=$(ifconfig eth0)
IPETH=$(echo "$IFCONFIG" | grep 'inet addr:' | cut -d: -f2 | awk '{ print }')
MASK=$(echo "$IFCONFIG" | awk '/Mask/{split(,a,":"); split(a[2],m,"."); h=m[1]*16777216+m[2]*65536+m[3]*256+m[4]; s=0; for(i=0; i < 32; i++) { s+=and(h,1); h/=2 } print s; }')
echo ${IPETH}/${MASK}

根据您的 ifconfig 版本,您必须使用 /Mask//netmask/ 来获取子网掩码。我需要这个小摆弄,因为我的系统上没有 ip

这给了我例如

172.29.11.12/24