请问这样的Shell脚本如何写?
时间:2011-08-19
来源:互联网
代码:
#!/bin/bash
bc=/usr/bin/bc
awk=/bin/awk
cut=/bin/cut
echo=/bin/echo
grep=/bin/grep
ifconfig=/sbin/ifconfig
//获取IP和netmask
MyIp=`ifconfig eth0|grep "inet addr"| cut -f 2 -d ":"|cut -f 1 -d " "`
MyMask=`ifconfig eth0|grep "inet addr"| cut -f 4 -d ":"`
//转换成二进制
for ((i=1;i<=4;i++));do
Tmp=`echo $MyIp|cut -f $i -d .`
MyIp_Bin+=`echo "obase=2;$Tmp"|bc|awk '{printf("%08d\n",$0);}'`
Tmp1=`echo $MyMask|cut -f $i -d .`
MyMask_Bin+=`echo "obase=2;$Tmp1"|bc|awk '{printf("%08d\n",$0);}'`
done;
//取得广播地址和网络地址
MyMask_Lng=`echo $MyMask_Bin|cut -f 1 -d 0`
MyMask_Lng=`expr length "$MyMask_Lng"`
Tmp=`expr substr $MyIp_Bin 1 $MyMask_Lng`
MyNet=$Tmp
MyBro=$Tmp
for ((i=$MyMask_Lng;i<=32;i++));do
MyNet+="0"
MyBro+="1"
done;
//转换为十进制
MyNet=$((2#$MyNet))
MyBro=$((2#$MyBro))
//打印IP地址
for ((i=$(($MyNet+1));i<$MyBro;i++));do
Tmp=`echo "obase=2;$i"|bc`
IP1=`expr substr $Tmp 1 8`
IP1=$((2#$IP1))
IP2=`expr substr $Tmp 9 8`
IP2=$((2#$IP2))
IP3=`expr substr $Tmp 17 8`
IP3=$((2#$IP3))
IP4=`expr substr $Tmp 25 8`
IP4=$((2#$IP4))
IP="$IP1"."$IP2"."$IP3"."$IP4"
echo $IP" "$Tmp
done;
bc=/usr/bin/bc
awk=/bin/awk
cut=/bin/cut
echo=/bin/echo
grep=/bin/grep
ifconfig=/sbin/ifconfig
//获取IP和netmask
MyIp=`ifconfig eth0|grep "inet addr"| cut -f 2 -d ":"|cut -f 1 -d " "`
MyMask=`ifconfig eth0|grep "inet addr"| cut -f 4 -d ":"`
//转换成二进制
for ((i=1;i<=4;i++));do
Tmp=`echo $MyIp|cut -f $i -d .`
MyIp_Bin+=`echo "obase=2;$Tmp"|bc|awk '{printf("%08d\n",$0);}'`
Tmp1=`echo $MyMask|cut -f $i -d .`
MyMask_Bin+=`echo "obase=2;$Tmp1"|bc|awk '{printf("%08d\n",$0);}'`
done;
//取得广播地址和网络地址
MyMask_Lng=`echo $MyMask_Bin|cut -f 1 -d 0`
MyMask_Lng=`expr length "$MyMask_Lng"`
Tmp=`expr substr $MyIp_Bin 1 $MyMask_Lng`
MyNet=$Tmp
MyBro=$Tmp
for ((i=$MyMask_Lng;i<=32;i++));do
MyNet+="0"
MyBro+="1"
done;
//转换为十进制
MyNet=$((2#$MyNet))
MyBro=$((2#$MyBro))
//打印IP地址
for ((i=$(($MyNet+1));i<$MyBro;i++));do
Tmp=`echo "obase=2;$i"|bc`
IP1=`expr substr $Tmp 1 8`
IP1=$((2#$IP1))
IP2=`expr substr $Tmp 9 8`
IP2=$((2#$IP2))
IP3=`expr substr $Tmp 17 8`
IP3=$((2#$IP3))
IP4=`expr substr $Tmp 25 8`
IP4=$((2#$IP4))
IP="$IP1"."$IP2"."$IP3"."$IP4"
echo $IP" "$Tmp
done;
脚本的工作是打印出所有广播域内的IP地址。可是会出现如下问题,十进制重复,二进制的却替增。
代码:
192.168.0.81 110000001010100000000000010100011
192.168.0.82 110000001010100000000000010100100
192.168.0.82 110000001010100000000000010100101
192.168.0.83 110000001010100000000000010100110
192.168.0.83 110000001010100000000000010100111
192.168.0.84 110000001010100000000000010101000
192.168.0.84 110000001010100000000000010101001
192.168.0.85 110000001010100000000000010101010
192.168.0.85 110000001010100000000000010101011
192.168.0.86 110000001010100000000000010101100
192.168.0.86 110000001010100000000000010101101
192.168.0.87 110000001010100000000000010101110
192.168.0.87 110000001010100000000000010101111
192.168.0.88 110000001010100000000000010110000
192.168.0.88 110000001010100000000000010110001
192.168.0.89 110000001010100000000000010110010
192.168.0.89 110000001010100000000000010110011
192.168.0.90 110000001010100000000000010110100
192.168.0.90 110000001010100000000000010110101
192.168.0.82 110000001010100000000000010100100
192.168.0.82 110000001010100000000000010100101
192.168.0.83 110000001010100000000000010100110
192.168.0.83 110000001010100000000000010100111
192.168.0.84 110000001010100000000000010101000
192.168.0.84 110000001010100000000000010101001
192.168.0.85 110000001010100000000000010101010
192.168.0.85 110000001010100000000000010101011
192.168.0.86 110000001010100000000000010101100
192.168.0.86 110000001010100000000000010101101
192.168.0.87 110000001010100000000000010101110
192.168.0.87 110000001010100000000000010101111
192.168.0.88 110000001010100000000000010110000
192.168.0.88 110000001010100000000000010110001
192.168.0.89 110000001010100000000000010110010
192.168.0.89 110000001010100000000000010110011
192.168.0.90 110000001010100000000000010110100
192.168.0.90 110000001010100000000000010110101
作者: 215317196 发布时间: 2011-08-19
有更好的方法也可以指教下啊
作者: 215317196 发布时间: 2011-08-19
代码:
for ((i=$MyMask_Lng;i<=32;i++));do
MyNet+="0"
MyBro+="1"
done;
MyNet+="0"
MyBro+="1"
done;
明白了,因为使用了 <= 号 ,导制二进制出现了 33 位数字,


作者: 215317196 发布时间: 2011-08-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28