+ -
当前位置:首页 → 问答吧 → 求脚本,修改文件

求脚本,修改文件

时间:2011-08-20

来源:互联网

呵呵,脚本写得不是很好,希望有高手帮我完善,比如使用了外部命令,或语法规范,或更妙的技巧,或更加灵活性……

代码:
#!/bin/bash
#author:        InBi
#date:          2011-08-16
#website:       http://www.itwhy.org/2011/08-20/939.html
########################################################
awk=/bin/awk
cut=/bin/cut
echo=/bin/echo
grep=/bin/grep
ifconfig=/sbin/ifconfig
expr=/usr/bin/expr
bc=/usr/bin/bc

Ip=`ifconfig eth0|grep "inet addr"|awk -F " " '{printf $2}'|awk -F ":" '{print $2}'`
Mask=`ifconfig eth0|grep "inet addr"|awk -F ":" '{printf $4}'`

for ((i=1;i< =4;i++));do
   Tmp=`echo $Ip|awk -F "." '{printf $'$i'}'`
   Ip_Bin+=`echo "obase=2;$Tmp"|bc|awk '{printf "%08d\n",$0}'`
   Tmp1=`echo $Mask|awk -F "." '{printf $'$i'}'`
   Mask_Bin+=`echo "obase=2;$Tmp1"|bc|awk '{printf "%08d\n",$0}'`
done;

Mask_Lng=`echo $Mask_Bin|cut -f 1 -d "0"`
Mask_Lng=`expr length "$Mask_Lng"`
MyNet=`expr substr $Ip_Bin 1 $Mask_Lng`
MyBro=$MyNet
for ((i=$Mask_Lng;i<32;i++));do
   MyNet+="0"
   MyBro+="1"
done;

MyNet=$((2#$MyNet))
MyBro=$((2#$MyBro))
echo "-----------------"`date +"%F    %T"`"-----------------" > $HOME/ScanIpMac.lst
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

   ping -n -c 1 $Ip > /dev/null 2>&1
   if [ $? == 0 ];then
      Mac=`arp -n $Ip|grep $Ip|awk -F " " '{print $3}'`
      echo $Ip"         "$Mac
   fi
done;
echo "-----------------"`date +"%F    %T"`"-----------------" >> $HOME/ScanIpMac.lst
exit 0

作者: 215317196   发布时间: 2011-08-20

先介绍一下你的脚本目的是什么,大概的思路,这样别人看的时候也会直接一点。

作者: rediscover   发布时间: 2011-08-20