我要处理CIDR块并在单行中将最后一个八位字节加2,以便在shell脚本中使用它。 例如,如果我的CIDR块是10.0.0.0/8,那么我的输出应该只有10.0.0.2。
答案 0 :(得分:1)
假设您的线路仅包含IP地址和阻止,例如:
BLOCK=10.0.0.0/8
您可以使用awk
:
cut -d/ -f1 <<< "$BLOCK" | awk -F . 'BEGIN {OFS="."} {print $1,$2,$3,$4+2}'
答案 1 :(得分:1)
#!/bin/bash
# convert IP to decimal
ip2dec() {
set -- ${1//./ } # split $1 with "." to $1 $2 $3 $4
declare -i dec # set integer attribute
dec=$1*256*256*256+$2*256*256+$3*256+$4
echo $dec
}
# convert decimal to IP
dec2ip() {
declare -i ip1 ip2 ip3 ip4
ip1=$1/256/256/256
ip2=($1-$ip1*256*256*256)/256/256
ip3=($1-$ip1*256*256*256-$ip2*256*256)/256
ip4=$1-$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
此脚本源自我的IP range generator script。