分页: 2 / 2

Re: 初学者写脚本,高手指点下啊!!!

发表于 : 2011-08-24 9:02
我就是我2
fnan 写了:发个perl看看,只见口水。 :em05
坐等perl :em06

Re: 初学者写脚本,高手指点下啊!!!

发表于 : 2011-08-25 13:51
215317196
学到很多东西啊,看来学习还是要交流,要到论坛来看看啊,一直看书是没有用的。

Re: 初学者写脚本,高手指点下啊!!!

发表于 : 2011-08-25 15:00
215317196
fnan 写了:#!/bin/bash
########################################################
awk=/bin/awk
echo=/bin/echo
ifconfig=/sbin/ifconfig
bc=/usr/bin/bc
##################################################################
Ip_Bin=$(ifconfig eth0|sed -rn '/inet /{s/[^:]*:([^ ]*).*/obase=2;\1/;s/\./;/gp}'|bc|xargs printf "%08d")
Mask_Bin=$(ifconfig eth0|sed -rn '/inet /{s/.*Mask:([^ ]*).*/obase=2;\1/;s/\./;/gp}'|bc|xargs printf "%08d")
#把IP和netmask每一段转换成二进制,然后连接起来
##################################################################
Mask_Lng=`printf ${Mask_Bin%%0*}|wc -c` #计算出netmask为“1”的部份有多少位
##################################################################
MyNet=${Ip_Bin:1:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d")
MyBro=${Ip_Bin:1:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d"|tr 0 1)

#计算出本机的网络号与广播号,用于下面循环
##################################################################
for (( i=$((2#$MyNet+1)); i< $((2#$MyBro)); i++ )); do
tmp=$(echo "obase=2;$i"|bc)
Ip=$(for a in {0..3};do [ ${a#0} ] && printf "."; printf $((2#${tmp:$a*8:8}));done) #每一次循环数8位分一段换成十制制,再连接起来。
##################################################################
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 #Ping每次计算出的IP,成功即提取MAC地址
##################################################################
done
exit 0
正确应该是:

代码: 全选

MyNet=${Ip_Bin:0:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d")
MyBro=${Ip_Bin:0:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d"|tr 0 1)
这集成太高了我看不懂,讲解下咯

代码: 全选

Ip_Bin=$(ifconfig eth0|sed -rn '/inet /{s/[^:]*:([^ ]*).*/obase=2;\1/;s/\./;/gp}'|bc|xargs printf "%08d")
Mask_Bin=$(ifconfig eth0|sed -rn '/inet /{s/.*Mask:([^ ]*).*/obase=2;\1/;s/\./;/gp}'|bc|xargs printf "%08d")
这个我机器运行不了,我改成这样就可以了

代码: 全选

Ip=$(for i in {0..3};do test $i != 0 && printf '.'; printf $((2#${Tmp:$i*8:8}));done)

Re: 初学者写脚本,高手指点下啊!!!

发表于 : 2011-08-25 18:18
fnan
分片有的是0开始有的是1开始,搞混了,不同机器确会有不同,还要调整的。