linux 脚本实现:子网掩码三种格式转换;二进制、十进制、位数
时间: 2023-07-10 11:06:17 浏览: 89
子网掩码换算方法.pdf
以下是一个实现子网掩码三种格式转换的脚本:
```bash
#!/bin/bash
# 子网掩码二进制转换为十进制
binary_to_decimal() {
local binary=$1
local decimal=$((2#${binary:0:8})).$((2#${binary:8:8})).$((2#${binary:16:8})).$((2#${binary:24:8}))
echo $decimal
}
# 子网掩码十进制转换为二进制
decimal_to_binary() {
local decimal=$1
local binary=$(echo "obase=2; $decimal" | bc | awk '{printf "%08d", $0}' | sed 's/\([01]\{8\}\)/\1./g; s/\.$//')
echo $binary
}
# 子网掩码位数转换为二进制
bit_to_binary() {
local bit=$1
local binary=$(printf "%0${bit}d" 1 | sed 's/./1/g; s/\([01]\{8\}\)/\1./g; s/\.$//')
binary="${binary}$(printf "%0$((32-${bit}))d" 0 | sed 's/./0/g; s/\([01]\{8\}\)/\.\1/g')"
echo $binary
}
# 读取用户输入
echo "请输入子网掩码(二进制、十进制或位数):"
read mask
# 判断输入的格式并进行转换
if [[ $mask =~ ^[01]{32}$ ]]; then
echo "子网掩码十进制表示为:$(binary_to_decimal $mask)"
echo "子网掩码位数表示为:$(echo $mask | tr -cd '1' | wc -c)"
elif [[ $mask =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "子网掩码二进制表示为:$(decimal_to_binary $mask)"
echo "子网掩码位数表示为:$(echo $mask | awk -F. '{printf "%08d%08d%08d%08d", $1, $2, $3, $4}' | tr -cd '1' | wc -c)"
elif [[ $mask =~ ^[0-9]+$ ]]; then
echo "子网掩码二进制表示为:$(bit_to_binary $mask)"
echo "子网掩码十进制表示为:$(binary_to_decimal $(bit_to_binary $mask))"
else
echo "请输入正确的子网掩码格式!"
fi
```
使用方法:
1. 将上述脚本保存为 `subnet-mask-converter.sh` 文件;
2. 在终端中进入文件所在目录,执行 `chmod +x subnet-mask-converter.sh` 命令,赋予脚本执行权限;
3. 执行 `./subnet-mask-converter.sh` 命令运行脚本;
4. 按照提示输入子网掩码(二进制、十进制或位数),脚本将输出对应的二进制、十进制和位数表示。
阅读全文