I have a script and it works fine, but I am sure this can be shrunk down to something much better. I would appreciate someone taking a crack at it for me.
What it does is take the ip block submitted and breaks it out down to /24's.
#!/bin/ksh
ipadd=${1}
octet1=`echo $ipadd | nawk -F. '{print $1}'`
octet2=`echo $ipadd | nawk -F. '{print $2}'`
octet3=`echo $ipadd | nawk -F. '{print $3}'`
subnet=`echo $ipadd | nawk -F/ '{print $2}'`
octet3_1=`echo "$octet3"+1 | bc`
octet3_2=`echo "$octet3"+2 | bc`
octet3_3=`echo "$octet3"+3 | bc`
octet3_4=`echo "$octet3"+4 | bc`
octet3_5=`echo "$octet3"+5 | bc`
octet3_6=`echo "$octet3"+6 | bc`
octet3_7=`echo "$octet3"+7 | bc`
octet3_8=`echo "$octet3"+8 | bc`
octet3_9=`echo "$octet3"+9 | bc`
octet3_10=`echo "$octet3"+10 | bc`
octet3_11=`echo "$octet3"+11 | bc`
octet3_12=`echo "$octet3"+12 | bc`
octet3_13=`echo "$octet3"+13 | bc`
octet3_14=`echo "$octet3"+14 | bc`
octet3_15=`echo "$octet3"+15 | bc`
octet3_16=`echo "$octet3"+16 | bc`
octet3_17=`echo "$octet3"+17 | bc`
octet3_18=`echo "$octet3"+18 | bc`
octet3_19=`echo "$octet3"+19 | bc`
octet3_20=`echo "$octet3"+20 | bc`
octet3_21=`echo "$octet3"+21 | bc`
octet3_22=`echo "$octet3"+22 | bc`
octet3_23=`echo "$octet3"+23 | bc`
octet3_24=`echo "$octet3"+24 | bc`
octet3_25=`echo "$octet3"+25 | bc`
octet3_26=`echo "$octet3"+26 | bc`
octet3_27=`echo "$octet3"+27 | bc`
octet3_28=`echo "$octet3"+28 | bc`
octet3_29=`echo "$octet3"+29 | bc`
octet3_30=`echo "$octet3"+30 | bc`
octet3_31=`echo "$octet3"+31 | bc`
octet3_32=`echo "$octet3"+32 | bc`
octet3_33=`echo "$octet3"+33 | bc`
octet3_34=`echo "$octet3"+34 | bc`
octet3_35=`echo "$octet3"+35 | bc`
octet3_36=`echo "$octet3"+36 | bc`
octet3_37=`echo "$octet3"+37 | bc`
octet3_38=`echo "$octet3"+38 | bc`
octet3_39=`echo "$octet3"+39 | bc`
octet3_40=`echo "$octet3"+40 | bc`
octet3_41=`echo "$octet3"+41 | bc`
octet3_42=`echo "$octet3"+42 | bc`
octet3_43=`echo "$octet3"+43 | bc`
octet3_44=`echo "$octet3"+44 | bc`
octet3_45=`echo "$octet3"+45 | bc`
octet3_46=`echo "$octet3"+46 | bc`
octet3_47=`echo "$octet3"+47 | bc`
octet3_48=`echo "$octet3"+48 | bc`
octet3_49=`echo "$octet3"+49 | bc`
octet3_50=`echo "$octet3"+50 | bc`
octet3_51=`echo "$octet3"+51 | bc`
octet3_52=`echo "$octet3"+52 | bc`
octet3_53=`echo "$octet3"+53 | bc`
octet3_54=`echo "$octet3"+54 | bc`
octet3_55=`echo "$octet3"+55 | bc`
octet3_56=`echo "$octet3"+56 | bc`
octet3_57=`echo "$octet3"+57 | bc`
octet3_58=`echo "$octet3"+58 | bc`
octet3_59=`echo "$octet3"+59 | bc`
octet3_60=`echo "$octet3"+60 | bc`
octet3_61=`echo "$octet3"+61 | bc`
octet3_62=`echo "$octet3"+62 | bc`
octet3_63=`echo "$octet3"+63 | bc`
if [[ $subnet -eq 24 ]]; then
echo $octet1"."$octet2"."$octet3".0/24"
fi
if [[ $subnet -eq 23 ]]; then
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
fi
if [[ $subnet -eq 22 ]]; then
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
fi
if [[ $subnet -eq 21 ]]; then
echo $octet1"."$octet2"."$octet3".0/21"
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3_4".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3_4".0/23"
echo $octet1"."$octet2"."$octet3_6".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
echo $octet1"."$octet2"."$octet3_4".0/24"
echo $octet1"."$octet2"."$octet3_5".0/24"
echo $octet1"."$octet2"."$octet3_6".0/24"
echo $octet1"."$octet2"."$octet3_7".0/24"
fi
if [[ $subnet -eq 20 ]]; then
echo $octet1"."$octet2"."$octet3".0/20"
echo $octet1"."$octet2"."$octet3".0/21"
echo $octet1"."$octet2"."$octet3_8".0/21"
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3_4".0/22"
echo $octet1"."$octet2"."$octet3_8".0/22"
echo $octet1"."$octet2"."$octet3_12".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3_4".0/23"
echo $octet1"."$octet2"."$octet3_6".0/23"
echo $octet1"."$octet2"."$octet3_8".0/23"
echo $octet1"."$octet2"."$octet3_10".0/23"
echo $octet1"."$octet2"."$octet3_12".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
echo $octet1"."$octet2"."$octet3_4".0/24"
echo $octet1"."$octet2"."$octet3_5".0/24"
echo $octet1"."$octet2"."$octet3_6".0/24"
echo $octet1"."$octet2"."$octet3_7".0/24"
echo $octet1"."$octet2"."$octet3_8".0/24"
echo $octet1"."$octet2"."$octet3_9".0/24"
echo $octet1"."$octet2"."$octet3_10".0/24"
echo $octet1"."$octet2"."$octet3_11".0/24"
echo $octet1"."$octet2"."$octet3_12".0/24"
echo $octet1"."$octet2"."$octet3_13".0/24"
echo $octet1"."$octet2"."$octet3_14".0/24"
echo $octet1"."$octet2"."$octet3_15".0/24"
fi
if [[ $subnet -eq 19 ]]; then
echo $octet1"."$octet2"."$octet3"."$octet"/19"
echo $octet1"."$octet2"."$octet3"."$octet"/20"
echo $octet1"."$octet2"."$octet3"."$octet16"/20"
echo $octet1"."$octet2"."$octet3".0/21"
echo $octet1"."$octet2"."$octet3_8".0/21"
echo $octet1"."$octet2"."$octet3_16".0/21"
echo $octet1"."$octet2"."$octet3_24".0/21"
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3_4".0/22"
echo $octet1"."$octet2"."$octet3_8".0/22"
echo $octet1"."$octet2"."$octet3_12".0/22"
echo $octet1"."$octet2"."$octet3_16".0/22"
echo $octet1"."$octet2"."$octet3_20".0/22"
echo $octet1"."$octet2"."$octet3_24".0/22"
echo $octet1"."$octet2"."$octet3_28".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3_4".0/23"
echo $octet1"."$octet2"."$octet3_6".0/23"
echo $octet1"."$octet2"."$octet3_8".0/23"
echo $octet1"."$octet2"."$octet3_10".0/23"
echo $octet1"."$octet2"."$octet3_12".0/23"
echo $octet1"."$octet2"."$octet3_14".0/23"
echo $octet1"."$octet2"."$octet3_16".0/23"
echo $octet1"."$octet2"."$octet3_18".0/23"
echo $octet1"."$octet2"."$octet3_20".0/23"
echo $octet1"."$octet2"."$octet3_22".0/23"
echo $octet1"."$octet2"."$octet3_24".0/23"
echo $octet1"."$octet2"."$octet3_26".0/23"
echo $octet1"."$octet2"."$octet3_28".0/23"
echo $octet1"."$octet2"."$octet3_30".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
echo $octet1"."$octet2"."$octet3_4".0/24"
echo $octet1"."$octet2"."$octet3_5".0/24"
echo $octet1"."$octet2"."$octet3_6".0/24"
echo $octet1"."$octet2"."$octet3_7".0/24"
echo $octet1"."$octet2"."$octet3_8".0/24"
echo $octet1"."$octet2"."$octet3_9".0/24"
echo $octet1"."$octet2"."$octet3_10".0/24"
echo $octet1"."$octet2"."$octet3_11".0/24"
echo $octet1"."$octet2"."$octet3_12".0/24"
echo $octet1"."$octet2"."$octet3_13".0/24"
echo $octet1"."$octet2"."$octet3_14".0/24"
echo $octet1"."$octet2"."$octet3_15".0/24"
echo $octet1"."$octet2"."$octet3_16".0/24"
echo $octet1"."$octet2"."$octet3_17".0/24"
echo $octet1"."$octet2"."$octet3_18".0/24"
echo $octet1"."$octet2"."$octet3_19".0/24"
echo $octet1"."$octet2"."$octet3_20".0/24"
echo $octet1"."$octet2"."$octet3_21".0/24"
echo $octet1"."$octet2"."$octet3_22".0/24"
echo $octet1"."$octet2"."$octet3_23".0/24"
echo $octet1"."$octet2"."$octet3_24".0/24"
echo $octet1"."$octet2"."$octet3_25".0/24"
echo $octet1"."$octet2"."$octet3_26".0/24"
echo $octet1"."$octet2"."$octet3_27".0/24"
echo $octet1"."$octet2"."$octet3_28".0/24"
echo $octet1"."$octet2"."$octet3_29".0/24"
echo $octet1"."$octet2"."$octet3_30".0/24"
echo $octet1"."$octet2"."$octet3_31".0/24"
fi
if [[ $subnet -eq 18 ]]; then
echo $octet1"."$octet2"."$octet3".0/18"
echo $octet1"."$octet2"."$octet3".0/19"
echo $octet1"."$octet2"."$octet3_32".0/19"
echo $octet1"."$octet2"."$octet3".0/20"
echo $octet1"."$octet2"."$octet3_16".0/20"
echo $octet1"."$octet2"."$octet3_32".0/20"
echo $octet1"."$octet2"."$octet3_48".0/20"
echo $octet1"."$octet2"."$octet3".0/21"
echo $octet1"."$octet2"."$octet3_8".0/21"
echo $octet1"."$octet2"."$octet3_16".0/21"
echo $octet1"."$octet2"."$octet3_24".0/21"
echo $octet1"."$octet2"."$octet3_32".0/21"
echo $octet1"."$octet2"."$octet3_40".0/21"
echo $octet1"."$octet2"."$octet3_48".0/21"
echo $octet1"."$octet2"."$octet3_56".0/21"
echo $octet1"."$octet2"."$octet3".0/22"
echo $octet1"."$octet2"."$octet3_4".0/22"
echo $octet1"."$octet2"."$octet3_8".0/22"
echo $octet1"."$octet2"."$octet3_12".0/22"
echo $octet1"."$octet2"."$octet3_16".0/22"
echo $octet1"."$octet2"."$octet3_20".0/22"
echo $octet1"."$octet2"."$octet3_24".0/22"
echo $octet1"."$octet2"."$octet3_28".0/22"
echo $octet1"."$octet2"."$octet3_32".0/22"
echo $octet1"."$octet2"."$octet3_36".0/22"
echo $octet1"."$octet2"."$octet3_40".0/22"
echo $octet1"."$octet2"."$octet3_44".0/22"
echo $octet1"."$octet2"."$octet3_48".0/22"
echo $octet1"."$octet2"."$octet3_52".0/22"
echo $octet1"."$octet2"."$octet3_56".0/22"
echo $octet1"."$octet2"."$octet3_60".0/22"
echo $octet1"."$octet2"."$octet3".0/23"
echo $octet1"."$octet2"."$octet3_2".0/23"
echo $octet1"."$octet2"."$octet3_4".0/23"
echo $octet1"."$octet2"."$octet3_6".0/23"
echo $octet1"."$octet2"."$octet3_8".0/23"
echo $octet1"."$octet2"."$octet3_10".0/23"
echo $octet1"."$octet2"."$octet3_12".0/23"
echo $octet1"."$octet2"."$octet3_14".0/23"
echo $octet1"."$octet2"."$octet3_16".0/23"
echo $octet1"."$octet2"."$octet3_18".0/23"
echo $octet1"."$octet2"."$octet3_20".0/23"
echo $octet1"."$octet2"."$octet3_22".0/23"
echo $octet1"."$octet2"."$octet3_24".0/23"
echo $octet1"."$octet2"."$octet3_26".0/23"
echo $octet1"."$octet2"."$octet3_28".0/23"
echo $octet1"."$octet2"."$octet3_30".0/23"
echo $octet1"."$octet2"."$octet3_32".0/23"
echo $octet1"."$octet2"."$octet3_34".0/23"
echo $octet1"."$octet2"."$octet3_36".0/23"
echo $octet1"."$octet2"."$octet3_38".0/23"
echo $octet1"."$octet2"."$octet3_40".0/23"
echo $octet1"."$octet2"."$octet3_42".0/23"
echo $octet1"."$octet2"."$octet3_44".0/23"
echo $octet1"."$octet2"."$octet3_46".0/23"
echo $octet1"."$octet2"."$octet3_48".0/23"
echo $octet1"."$octet2"."$octet3_50".0/23"
echo $octet1"."$octet2"."$octet3_52".0/23"
echo $octet1"."$octet2"."$octet3_54".0/23"
echo $octet1"."$octet2"."$octet3_56".0/23"
echo $octet1"."$octet2"."$octet3_58".0/23"
echo $octet1"."$octet2"."$octet3_60".0/23"
echo $octet1"."$octet2"."$octet3_62".0/23"
echo $octet1"."$octet2"."$octet3".0/24"
echo $octet1"."$octet2"."$octet3_1".0/24"
echo $octet1"."$octet2"."$octet3_2".0/24"
echo $octet1"."$octet2"."$octet3_3".0/24"
echo $octet1"."$octet2"."$octet3_4".0/24"
echo $octet1"."$octet2"."$octet3_5".0/24"
echo $octet1"."$octet2"."$octet3_6".0/24"
echo $octet1"."$octet2"."$octet3_7".0/24"
echo $octet1"."$octet2"."$octet3_8".0/24"
echo $octet1"."$octet2"."$octet3_9".0/24"
echo $octet1"."$octet2"."$octet3_10".0/24"
echo $octet1"."$octet2"."$octet3_11".0/24"
echo $octet1"."$octet2"."$octet3_12".0/24"
echo $octet1"."$octet2"."$octet3_13".0/24"
echo $octet1"."$octet2"."$octet3_14".0/24"
echo $octet1"."$octet2"."$octet3_15".0/24"
echo $octet1"."$octet2"."$octet3_16".0/24"
echo $octet1"."$octet2"."$octet3_17".0/24"
echo $octet1"."$octet2"."$octet3_18".0/24"
echo $octet1"."$octet2"."$octet3_19".0/24"
echo $octet1"."$octet2"."$octet3_20".0/24"
echo $octet1"."$octet2"."$octet3_21".0/24"
echo $octet1"."$octet2"."$octet3_22".0/24"
echo $octet1"."$octet2"."$octet3_23".0/24"
echo $octet1"."$octet2"."$octet3_24".0/24"
echo $octet1"."$octet2"."$octet3_25".0/24"
echo $octet1"."$octet2"."$octet3_26".0/24"
echo $octet1"."$octet2"."$octet3_27".0/24"
echo $octet1"."$octet2"."$octet3_28".0/24"
echo $octet1"."$octet2"."$octet3_29".0/24"
echo $octet1"."$octet2"."$octet3_30".0/24"
echo $octet1"."$octet2"."$octet3_31".0/24"
echo $octet1"."$octet2"."$octet3_32".0/24"
echo $octet1"."$octet2"."$octet3_33".0/24"
echo $octet1"."$octet2"."$octet3_34".0/24"
echo $octet1"."$octet2"."$octet3_35".0/24"
echo $octet1"."$octet2"."$octet3_36".0/24"
echo $octet1"."$octet2"."$octet3_37".0/24"
echo $octet1"."$octet2"."$octet3_38".0/24"
echo $octet1"."$octet2"."$octet3_39".0/24"
echo $octet1"."$octet2"."$octet3_40".0/24"
echo $octet1"."$octet2"."$octet3_41".0/24"
echo $octet1"."$octet2"."$octet3_42".0/24"
echo $octet1"."$octet2"."$octet3_43".0/24"
echo $octet1"."$octet2"."$octet3_44".0/24"
echo $octet1"."$octet2"."$octet3_45".0/24"
echo $octet1"."$octet2"."$octet3_46".0/24"
echo $octet1"."$octet2"."$octet3_47".0/24"
echo $octet1"."$octet2"."$octet3_48".0/24"
echo $octet1"."$octet2"."$octet3_49".0/24"
echo $octet1"."$octet2"."$octet3_50".0/24"
echo $octet1"."$octet2"."$octet3_51".0/24"
echo $octet1"."$octet2"."$octet3_52".0/24"
echo $octet1"."$octet2"."$octet3_53".0/24"
echo $octet1"."$octet2"."$octet3_54".0/24"
echo $octet1"."$octet2"."$octet3_55".0/24"
echo $octet1"."$octet2"."$octet3_56".0/24"
echo $octet1"."$octet2"."$octet3_57".0/24"
echo $octet1"."$octet2"."$octet3_58".0/24"
echo $octet1"."$octet2"."$octet3_59".0/24"
echo $octet1"."$octet2"."$octet3_60".0/24"
echo $octet1"."$octet2"."$octet3_61".0/24"
echo $octet1"."$octet2"."$octet3_62".0/24"
echo $octet1"."$octet2"."$octet3_63".0/24"
fi
Here is an example run where a /22 is broken down into /23's and /24's.
./test.sh 192.168.1.0/22
192.168.1.0/22
192.168.1.0/23
192.168.3.0/23
192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
192.168.4.0/24