La migliore soluzione specifica per Linux è usare sysfs:
$ IFACE=eth0
$ read MAC </sys/class/net/$IFACE/address
$ echo $IFACE $MAC
eth0 00:ab:cd:12:34:56
Questo metodo è estremamente pulito rispetto agli altri e non genera processi aggiuntivi da read
è un comando integrato per le shell POSIX, comprese le shell non BASH. Tuttavia, se hai bisogno della portabilità su OS X, dovrai usare ifconfig
e sed
metodi, poiché OS X non ha un'interfaccia di filesystem virtuale come sysfs.
Puoi fare come segue
ifconfig <Interface ex:eth0,eth1> | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
Inoltre puoi ottenere MAC per tutte le interfacce come segue
cat /sys/class/net/*/address
Per un'interfaccia particolare come per eth0
cat /sys/class/net/eth0/address