shell脚本实现字符串子网掩码转为位数
在系统配置里,有时需要脚本完成子网掩码到位数的转换,如下shell脚本可以实习这个功能
#!/bin/shsubnet_mask_to_cidr() {local subnet_mask="$1"local cidr=0# 将子网掩码的每个部分转换为二进制,并计算1的个数for octet in $(echo "$subnet_mask" | tr '.' ' '); do #将点转换为空格,然后用for循环处理binary=$(printf "%08d" $(echo "obase=2;$octet" | bc)) #将十进制转换为2进制cidr=$((cidr + $(echo -n "$binary" | tr -d '0' | wc -c))) #去掉二进制数据串中的0并累加1的个数doneecho "$cidr"
}# 示例用法
subnet_mask="255.255.255.192"
cidr=$(subnet_mask_to_cidr "$subnet_mask")
echo "CIDR: $cidr"
运行结果:
# ./test.sh
CIDR: 26