You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中将子网掩码转换为CIDR表示法?

子网掩码转CIDR表示法的Bash实现方案

当然有办法啦!在Bash环境里,不管是用现成工具还是纯手写小脚本,都能轻松把子网掩码转换成/24这种CIDR格式,下面给你分享几个我常用的实用方案:

1. 用ipcalc工具(最省心)

很多Linux发行版默认预装了ipcalc,直接用它就能一键搞定转换:

ipcalc 255.255.255.0 | awk '/CIDR:/ {print $2}'

要是你的系统没装ipcalc,用包管理器装就行——Debian/Ubuntu系用sudo apt install ipcalc,RHEL/CentOS系用sudo dnf install ipcalc。

2. 纯Bash脚本(无需额外依赖)

如果不想装新工具,用纯Bash就能实现,核心逻辑是把子网掩码的每个字节转成二进制,统计所有1的总数:

# 定义转换函数,直接放到~/.bashrc里以后随时用
mask_to_cidr() {
    local mask=$1
    local cidr=0
    # 把掩码按点分割成四个字节
    for octet in $(echo "$mask" | tr '.' ' '); do
        # 把十进制字节转成二进制
        binary=$(echo "obase=2; $octet" | bc)
        # 统计当前字节里1的数量,加到总长度里
        cidr=$((cidr + $(grep -o '1' <<< "$binary" | wc -l)))
    done
    echo "/$cidr"
}

# 调用示例,直接输出结果
mask_to_cidr 255.255.255.0

这个函数可以直接加到你的bash配置文件里,以后需要转换的时候直接调用就行。

3. 用awk单行命令(极简主义)

还有个更简洁的awk单行命令,不用写函数,直接就能用:

echo 255.255.255.0 | awk -F '.' '{for(i=1;i<=4;i++) c+=log($i+1)/log(2); print "/"c}'

原理是利用每个字节的数值对应的二进制1的数量(比如255对应8个1,log2(255+1)=8),把四个字节的数值加起来就是CIDR前缀长度。

小贴士:如果要批量处理多个子网掩码,把这些命令放到循环里就行,比如读一个包含掩码的文本文件,逐行转换。

内容的提问来源于stack exchange,提问作者Alex_DeLarge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:29:13