脚本如下
#!/bin/sh################################################################################################FILE NAME: DNS_IP.sh#Author: IamOkay#Create Time:2017年01月05日 星期四 14时23分35秒##############################################################################################DIR=/usr/apnicFILE=${DIR}/ip_apnicif [ ! -d "$DIR" ]; then mkdir $DIRfiif [ ! -f "$FILE" ]; thenwget -c http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O $FILEfigrep 'apnic|CN|ipv4' /usr/apnic/ip_apnic|cut -f 4,5 -d '|' | sed -e 's/|/ /g' |while read ip cntdoecho $ip:$cntmask=$(cat<>cn.netif whois $ip |grep -i "*.chinanet.*\|.*telecom.*" >/dev/null;then echo $ip/$mask >> chinanetelif whois $ip |grep -i ".*unicom.*" >/dev/null;then echo $ip/$mask >> unicomelse echo $ip/$mask >> othersfidone
其中ip地址的计算部分如下
mask=$(cat<
这段代码理解有些难,我们可以理解为C语言中的宏定义【字符串程序】
mask=$(cat<
然后,我们通过bc命令计算,计算改字符串程序,注意,每次得到的是pow的值,然后获得最后一次tail 的值 tail -1
mask=$(cat<
当然,如果你还是觉得上述代码不能理解,可以使用如下代码
#!/bin/sh################################################################################################FILE NAME: DNS_IP.sh#Author: IamOkay#Create Time:2017年01月05日 星期四 14时23分35秒##############################################################################################function log2(){ x=$1; echo '计算' $x; for i in {32..1} do if(($x<=1));then return $i; else x=$(($x/2)); fi done return 1;}DIR=/usr/apnicFILE=${DIR}/ip_apnicif [ ! -d "$DIR" ]; then mkdir $DIRfiif [ ! -f "$FILE" ]; thenwget -c http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O $FILEfigrep 'apnic|CN|ipv4' /usr/apnic/ip_apnic|cut -f 4,5 -d '|' | sed -e 's/|/ /g' |while read ip cntdoecho $ip:$cntlog2 $cntmask=$?echo $ip/$mask >>cn.netif whois $ip |grep -i "*.chinanet.*\|.*telecom.*" >/dev/null;then echo $ip/$mask >> chinanetelif whois $ip |grep -i ".*unicom.*" >/dev/null;then echo $ip/$mask >> unicomelse echo $ip/$mask >> othersfidone