遇到一个实际的问题,通过mac地址查询ip。交换机上获取到的mac地址格式是这样的:aabb-ccdd-eeff,而通过arping获取到的mac地址格式为:aa:bb:cc:dd:ee:ff,查询的时候需要转换格式,步骤如下:
1.将“-”符号替换为空
real_mac=`echo $mac|sed "s/-//g"`
得到real_mac=aabbccddeeff
2.将mac地址分为6个段
mac1=${real_mac:0:2}
mac2=${real_mac:2:2}
mac3=${real_mac:4:2}
mac4=${real_mac:6:2}
mac5=${real_mac:8:2}
mac6=${real_mac:10:2}
3.转换为aa:bb:cc:dd:ee:ff格式
transform_mac=`echo $mac1:$mac2:$mac3:$mac4:$mac5:$mac6`
全部代码如下:
#!/bin/bash
file=/srv/mac_search/record/`date -d "1 days ago" "+%Y-%m-%d"`.txt
ls $file &> /dev/null
if(($?!=0));then
wget http://192.168.1.1/mac-search/`date -d "1 days ago" "+%Y-%m-%d"`.txt -O /srv/mac_search/record/`date -d "1 days ago" "+%Y-%m-%d"`.txt &> /dev/null
fi
real_mac=`echo $1|sed "s/-//g"|sed "s/://g"`
mac1=${real_mac:0:2}
mac2=${real_mac:2:2}
mac3=${real_mac:4:2}
mac4=${real_mac:6:2}
mac5=${real_mac:8:2}
mac6=${real_mac:10:2}
transform_mac=`echo $mac1:$mac2:$mac3:$mac4:$mac5:$mac6|sed "s/[a-z]/[A-Z]/g"`
ip=`grep $transform_mac $file|awk ‘{print $4}‘`
echo $ip
if [ -z "$ip" ];then
echo "No IP matches this MAC"
fi
顺便提几点:
1.获得前一天的日期
date -d "1 days ago" "+%Y-%m-%d"`
获得后一天的日期:"-1 days ago"
2.判断参数是否为空值
if [ -z "$ip" ]
需要加双引号,不然会报错“binary operator expected”
本文出自 “我很简单” 博客,请务必保留此出处http://easyyx.blog.51cto.com/8603153/1733470
原文地址:http://easyyx.blog.51cto.com/8603153/1733470