我正在尝试提取无线网卡的 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