通过 bash 脚本获取 mac 地址

通过 bash 脚本获取 mac 地址

介绍一些背景知识。我正在创建一个可以在 Ubuntu 的 USB 上运行的脚本。它需要从当前连接的笔记本电脑中提取各种信息并将其保存到文件中。

现在我正在使用“lshw -c network >> textfile.txt”来提取网络信息。

但是它为我提供了无线接口和以太网接口的完整信息,而我只想收集以太网接口下的 mac 地址(串行)。

有什么办法可以做到这一点吗?

答案1

lshw隔离以太网设备的输出可能对您有用:

lshw -c network | grep -A 8 'Ethernet'

-A 8告诉 grep 在匹配后包含 8 行。

此外,如果您想进一步将输出减少到仅包含 MAC 地址(串行)的行,您可以再次使用 grep,如下所示:

lshw -c network | grep -A 8 'Ethernet' | grep 'serial'

... 一种更可控的方式(不仅仅依赖于纯文本解析)是利用 的lshw选项-json以 JSON 结构化数据输出,可以使用类似以下工具的更可靠地处理这些数据jq

lshw -json -c network 2>/dev/null |
jq -r '.[] | select(."description" == "Ethernet interface") | .serial'

答案2

您可以awk在脚本中使用 返回以太网连接的 MAC 地址。下面一行实际上会生成以太网设备的逻辑名称及其 MAC 地址。

sudo lshw -c network | awk '/logical name:/{ ETH=$3; next } /serial:/{ print ETH " " $2 }'

根据您在 USB 上运行的脚本,sudo可能需要或不需要。

这是其运行的一个示例。

$ sudo lshw -c network | awk '/logical name:/{ ETH=$3; next } /serial:/{ print ETH " " $2 }'
eth0 94:de:80:c3:ba:dd

或者在具有多个 NIC 的系统上:

terrance@Intrepid:~$ sudo lshw -c network | awk '/logical name:/{ ETH=$3; next } /serial:/{ print ETH " " $2 }'
eth0 40:8d:5c:4f:11:fe      
eth1 de:9c:0b:f9:4d:ce

希望这可以帮助!

答案3

对于那些可能有理由使用的人sed

$ sudo lshw -c network | sed -nre 's/^ +serial: (.+)$/\1/p'

相关内容