如何处理 CIDR block/Text 处理?
How to process CIDR block/Text processing?
我必须处理 CIDR 块并将 2 添加到单行中的最后一个八位字节,以便在 shell 脚本中使用它。
例如,如果我的 CIDR 块是 10.0.0.0/8,那么我的输出应该只是 10.0.0.2。
假设你的线路只包含IP地址和分块,如:
BLOCK=10.0.0.0/8
您可以使用 awk
:
cut -d/ -f1 <<< "$BLOCK" | awk -F . 'BEGIN {OFS="."} {print ,,,+2}'
#!/bin/bash
# convert IP to decimal
ip2dec() {
set -- ${1//./ } # split with "." to
declare -i dec # set integer attribute
dec=*256*256*256+*256*256+*256+
echo $dec
}
# convert decimal to IP
dec2ip() {
declare -i ip1 ip2 ip3 ip4
ip1=/256/256/256
ip2=(-$ip1*256*256*256)/256/256
ip3=(-$ip1*256*256*256-$ip2*256*256)/256
ip4=-$ip1*256*256*256-$ip2*256*256-$ip3*256
echo $ip1.$ip2.$ip3.$ip4
}
dec=$(ip2dec ${1%/*}) # remove slash and mask
dec=$((dec+2)) # increment
dec2ip $dec
示例:./script.sh 10.0.0.0/8
输出:
10.0.0.2
此脚本源自我的。
我必须处理 CIDR 块并将 2 添加到单行中的最后一个八位字节,以便在 shell 脚本中使用它。 例如,如果我的 CIDR 块是 10.0.0.0/8,那么我的输出应该只是 10.0.0.2。
假设你的线路只包含IP地址和分块,如:
BLOCK=10.0.0.0/8
您可以使用 awk
:
cut -d/ -f1 <<< "$BLOCK" | awk -F . 'BEGIN {OFS="."} {print ,,,+2}'
#!/bin/bash
# convert IP to decimal
ip2dec() {
set -- ${1//./ } # split with "." to
declare -i dec # set integer attribute
dec=*256*256*256+*256*256+*256+
echo $dec
}
# convert decimal to IP
dec2ip() {
declare -i ip1 ip2 ip3 ip4
ip1=/256/256/256
ip2=(-$ip1*256*256*256)/256/256
ip3=(-$ip1*256*256*256-$ip2*256*256)/256
ip4=-$ip1*256*256*256-$ip2*256*256-$ip3*256
echo $ip1.$ip2.$ip3.$ip4
}
dec=$(ip2dec ${1%/*}) # remove slash and mask
dec=$((dec+2)) # increment
dec2ip $dec
示例:./script.sh 10.0.0.0/8
输出:
10.0.0.2
此脚本源自我的