linux的掩码长度,Bash 实现子网掩码与前缀长度互转
前綴長度轉換為子網掩碼#!/bin/bash
# date: 2018-03-03
# license: GPLv3 https://www.gnu.org/licenses/gpl-3.0.txt
# author: nanpuyue https://blog.nanpuyue.com
num=$((4294967296 - 2**(32-$1)))
for i in {3..0};do
echo -n $((num / 256**i))
num=$((num % 256**i))
(($i == 0)) && echo || echo -n .
done
這段腳本完全使用 Bash 內置函數實現,不調用外部進程。
子網掩碼轉換為前綴長度#!/bin/bash
# date: 2018-09-15
# license: GPLv3 https://www.gnu.org/licenses/gpl-3.0.txt
# author: nanpuyue https://blog.nanpuyue.com
n=0;b=3
for i in ${1//./ };do
if ((0 <= i < 256));then
let n+=$((2**(b*8) * i))
let b--
else
exit 1
fi
done
[[ $(echo "obase=2;$n"|bc) =~ ^(1+)0*$ ]] &&\
((${#BASH_REMATCH[0]} == 32)) &&\
echo ${#BASH_REMATCH[1]}
本來也想用純 Bash 實現,但為了腳本的簡潔還是調用了 bc 命令,當給出的子網掩碼有誤時,輸出結果為空同時腳本返回值為 1 。
Gist:
總結
以上是生活随笔為你收集整理的linux的掩码长度,Bash 实现子网掩码与前缀长度互转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 寻找http://localhost/p
- 下一篇: [DUBBO] Expected sin