我使用的Linux服务器上有多个网卡,有时侯就须要在脚本中使用到指定网卡的IP地址或MAC地址linux操作系统版本,这么这个时侯就有两种做法linux操作系统界面,一是预先读取网卡的IP地址或MAC地址,之后写入到脚本中;另外一种方式就是通过shell命令实时获取指定网卡上的当前IP地址或MAC地址。
二、用法使用ifconfigeth0读取网卡信息自动将IP地址或MAC地址拷贝下来,并填入到脚本中的对应变量中三、脚本实现ifconfigeth0|grep“inetaddr:”|awk‘{print$2}’|cut-c6-(获取eth0网卡的IP地址)ifconfigeth0|grep“HWaddr”|awk‘{print$5}’(获取eth0网卡的MAC地址)
里面的脚本的分解步骤是:
获取eth0网卡的信息过滤出IP地址的行或MAC地址的行使用awk输出指定主键,对于MAC地址,第5个数组就是MAC;而对于IP地址linux获取ip地址,还须要对第2个数组截取第6个字符以后的内容说明ifconfig部份说明
先看一下ifconfig的man指南中的描述:
Ifconfig is used to configure the kernel-resident network interfaces.
If no arguments are given, ifconfig displays the status of the currently active interfaces. If a single
interface argument is given, it displays the status of the given interface only; if a single -a argument is
given, it displays the status of all interfaces, even those that are down.
ifconfig命令的主要作用是进行网卡配置linux获取ip地址,而且假如没有给定参数或则只是给定了网卡名称这一个参数,则都会显示网卡的状态信息。
为此,在这儿,我们通过参数eth0来指定输出该网卡的信息。
grep命令部份说明
我们先看一下ifconfig的输出格式:
eth0Linkencap:EthernetHWaddr08:00:27:f6:18:8e
inetaddr:192.168.56.101Bcast:192.168.56.255Mask:255.255.255.0
inet6addr:fe80::a00:27ff:fef6:188e/64Scope:Link
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:12575errors:0dropped:0overruns:0frame:0
TXpackets:3429errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:1931585(1.9MB)TXbytes:465667(465.6KB)
其中蓝色部份中包含了MAC地址信息,红色部份包含了IPv4的地址信息。而假如我们指定的网卡不存在时,则输出信息如下:
nfer@nfer:~$ifconfigeth1
eth1:errorfetchinginterfaceinformation:Devicenotfound
因而在前面的命令中,我们分别使用grep"inetaddr:"和grep"HWaddr"来过滤出IPv4的地址和MAC地址所在的行,倘若是该网卡不存在或则不处于活动状态就过滤不到对应的行。
awk命令和cut命令部份说明
在前面的grep命令过滤下来的MAC地址和IPv4地址所在行的格式如下:
eth0Linkencap:EthernetHWaddr08:00:27:f6:18:8e
inetaddr:192.168.56.101Bcast:192.168.56.255Mask:255.255.255.0
因而,倘若是获取MAC地址,只须要使用awk输出第5个数组的值即可:awk‘{print$5}’;
而假如是要获取IPv4的地址,则须要先输出第2个数组的值:awk‘{print$2}’,之后再使用cut命令,将"addr:"这5个字符去掉,即从第6个字符到结尾的所有字符:cut-c6-。