- 论坛徽章:
- 0
|
- #!/bin/sh
- ip="192.168.0.8"
- mask="255.255.254.0"
- range=""
- ip_array=(`echo $ip | tr '.' ' '`)
- mask_array=(`echo $mask | tr '.' ' '`)
- for (( i = 0 ; i < 4 ; i++ ))
- do
- if (( ${ip_array[$i]} > 255 || ${mask_array[$i]} > 255 ))
- then
- exit 1
- else
- let "tmp = ${ip_array[$i]} & ${mask_array[$i]}"
- net_array[$i]="$tmp"
- fi
- done
- for (( i = 31 ; i >= 0 ; i-- ))
- do
- let "index = $i / 8"
- part=${mask_array[$index]}
- let "last_bit = $part & 0x01"
- if (( $last_bit == 0x01 ))
- then
- break
- fi
- let "part >>= 1"
- mask_array[$index]=$part
- done
- let "mask_zero_num = 31 - $i"
- let "range = 2 ** $mask_zero_num"
- # fix here to fit range > 256 * 256
- let "tail = ${net_array[2]} * 256 + ${net_array[3]}"
- ip_part_1=${net_array[0]}
- ip_part_2=${net_array[1]}
- for (( i = $tail ; i < $range ; i++ ))
- do
- let "ip_part_3 = i / 256"
- let "ip_part_4 = i % 256"
- sub_ip="$ip_part_1.$ip_part_2.$ip_part_3.$ip_part_4"
- echo "$sub_ip"
- done
复制代码
一个硬限制: 256*256...可以修改适应的...还有工作要做, 就给写成这样吧, 写的不是很好...
另外我不考虑mask中特殊情况, 我都假设0之间没有1这种形式~~~
另外就是bash是必要的...本想用awk...结果发现没有&运算...
[ 本帖最后由 Edengundam 于 2006-11-21 10:23 编辑 ] |
|