如何通过Bash脚本仅提取以太网接口的MAC地址
如何通过Bash脚本仅提取以太网接口的MAC地址
没问题!针对你用Ubuntu USB脚本提取以太网MAC地址的需求,这里有几个实用的方案,直接就能整合到你的脚本里:
基于你当前使用的
lshw优化:
既然你已经在使用lshw,可以通过过滤精准定位以太网接口的MAC地址(也就是输出里的serial字段):lshw -c network | grep -A 10 'Ethernet' | grep 'serial' | awk '{print $2}' >> textfile.txt简单解释下:
grep -A 10 'Ethernet'会找到包含“Ethernet”的行,并显示该行后面10行内容;接着grep 'serial'定位到存储MAC地址的行;最后用awk提取第二个字段,就是你要的MAC地址。如果系统里有多个以太网接口,只想取第一个的话,在awk里加个exit就行:lshw -c network | grep -A 10 'Ethernet' | grep 'serial' | awk '{print $2; exit}' >> textfile.txt更轻量的
ip命令方案:ip命令是Linux系统默认自带的工具,比lshw更轻量,适合USB环境。以太网接口通常命名为eth0、enp*这类,我们可以直接过滤这些接口的MAC地址:ip addr show | grep -E 'enp|eth' | grep link/ether | awk '{print $2}' >> textfile.txt要是担心不小心匹配到无线接口(极少数情况),可以再加个排除无线的过滤:
ip addr show | grep -v 'wlan' | grep link/ether | awk '{print $2}' >> textfile.txt直接读取系统文件的稳定方案:
Linux把所有网络接口的信息存在/sys/class/net/目录下,我们可以遍历这个目录,排除无线接口后读取MAC地址文件:for iface in /sys/class/net/*; do if [[ ! $(basename "$iface") =~ wlan ]]; then cat "$iface/address" >> textfile.txt fi done这个方法不需要依赖任何额外命令,完全基于系统原生文件,稳定性拉满,适合资源有限的USB运行环境。
备注:内容来源于stack exchange,提问作者pa-sc
相关产品推荐
相关产品推荐

