如何处理 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

此脚本源自我的