我想要创建一个可以与实时 Ubuntu 16 一起使用的 bash 脚本。我在一家拥有多家不同类型主板制造商的制造工厂工作,我们的许多客户在系统发货前都会要求提供其 MAC 地址。网络接口数量可能为 1 到 10 个,系统数量可能为 1 到数百个。
如何创建一个脚本来按照网络接口的顺序推送这些信息,例如:
LAN1 MAC | LAN2 MAC | LAN3 MAC | 等等.. 等等..
到目前为止,我已经编写了一个简单的脚本,它将列出所有接口的所有 MAC 地址,但是我怎样才能按照我想要的顺序排列它们,并确保脚本知道从 LAN1 开始,然后移动到 LAN2......?
#!/bin/bash
MAC1=$(ip a |awk '/ether/ {print $2}')
echo "$MAC"
#end
感谢您的帮助!
答案1
ip link
正如 xhienne 提到的,使用一些过滤技术就足够了。我个人使用awk
。
$ ip -o link | awk '{print $2,$(NF-2)}'
lo: 00:00:00:00:00:00
eth3: f0:76:1c:8c:6d:f7
wlan7: d0:53:49:3d:53:fd
docker0: 02:42:bc:cd:0b:4d
如果需要的话,也可以使用任何其他语言来完成,例如python
:
$ cat get_iface_mac.py
#!/usr/bin/env python
from __future__ import print_function
import netifaces as ni
for iface in ni.interfaces():
print(iface + " " + ni.ifaddresses(iface)[ni.AF_LINK][0]['addr'])
$ ./get_iface_mac.py
lo 00:00:00:00:00:00
eth3 f0:76:1c:8c:6d:f7
wlan7 d0:53:49:3d:53:fd
docker0 02:42:bc:cd:0b:4d
答案2
假设 lan1,...,lanN 是网络接口名称,如 eth0,这应该可以解决您的问题:
ip link \
| sed -z 's,\n\s*link/\S*,:,g;' \
| cut -d : -f 2,4- \
| cut -d" " -f2,3 \
| sort
该ip link
命令列出了网络接口;(GNU)sed
基本上连接了行;两者cut
提取了所需的内容;最后sort
按接口名称的字母顺序进行排序。