如何从 grep 中提取 MAC 数据并插入到 bash

如何从 grep 中提取 MAC 数据并插入到 bash

我正在尝试提取无线网卡的 MAC 地址,然后将其作为 VAR 变量插入到 bash 脚本中,并进行增量更改。所以...

$ ifconfig wlan1 | grep HWaddr
wlan1     Link encap:Ethernet  HWaddr XX:xx:XX:xx:XX:xx

现在我需要命令行提取 XX:xx:XX:xx:XX:xx 并将其添加到带有 +1 VAR 的脚本中。如果我可以从上面的 grep 中提取 XX:xx:XX:xx:XX:xx,这似乎很简单。(即如何在 bash 中增加变量?

有人能看出在 bash 脚本中添加 MAC 地址作为变量的障碍吗?也就是说,如果 bash 不认为 MAC 是字符串计算或错误命令,那该怎么办?

答案1

从文件系统中的相应文件读取 MAC 可能更容易sys。如果您将变量命名为 mymac,则:

$ mymac=$(cat /sys/class/net/wlan1/address)

应该管用

$ echo "mymac"
XX:xx:XX:xx:XX:xx

可以通过一些变量操作来增加最后几位数字的值。只有当它们都是值小于或等于 98 的数字时,此方法才会起作用。以下示例使用假定的 MAC 52:1c:53:8b:8f:77。

$ endpair=${mymac##*:}
$ ((endpair++))
$ newmac="${mymac%:*}:${endpair}"
$ echo "Hooray $mymac is now $newmac"
Hooray 52:1c:53:8b:8f:77 is now 52:1c:53:8b:8f:78

答案2

Stack Overflow 上的这篇文章提供了一个可移植的解决方案(它通常可以在 Unix 上运行,而不仅仅是 Ubuntu),并且如果输出格式ifconfig发生变化,应该能够提供弹性(或者如果它被弃用/删除并且您决定切换到其他工具)

ifconfig wlan1 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

答案3

您需要添加更多命令来仅提取 MAC 地址。

我建议您使用 awk 并仅打印最后一列,例如:

ifconfig wlan1 | grep HWaddr | awk '{ print $5 }'

此命令将仅显示 XX:xx:XX:xx:XX:xx,awk 打印 $5 按空格分割行。

如果要将此结果添加到 bash 变量中,则需要应用此命令:

myVarName=$(ifconfig wlan1 | grep HWaddr | awk '{ print $5 }')

然后,您将此内容与 $myVarName 一起使用。

echo $myVarName
XX:xx:XX:xx:XX:xx

相关内容