我正在尝试在Linux中将MAC地址作为变量获取,但很少成功。

8
我正在使用以下代码获取eth0的MAC地址并将其存储到一个变量中以便在文件名中使用,但它很少工作。它不是从来没有工作过,而是不可预测。
ntpdate -b 0.centos.pool.ntp.org
DATE=$(date +%s)
MAC=$(ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | sed 's/://g')
cp logfile logfilecp-$MAC-$DATE

现在,如果我使用ntpdate命令行,它似乎工作的不太频繁,但无论如何,它完全是不可预测的。你有任何想法可以让它工作得更好吗?最终我得到的文件名是:

logfile--1375195808.bz2

新信息

我已经设置了脚本以cronjob(crontab -e)的方式运行。我注意到当它作为cronjob运行时,它没有获得MAC地址,但是当我手动运行它时,./runscript.bash它可以获得MAC地址。希望有人知道这可能是什么原因。

谢谢。


小心点,你可能会捕获IPv6地址。你应该进一步过滤,查找“HWaddr”。 - Marc B
当它失败时,ifconfig eth0 显示什么? - Barmar
ifconfig显示看起来没问题,它显示了MAC地址。我刚刚注意到了一些新的东西,已经添加到主帖中了。 - McB
2个回答

32

尝试一种比通过ifconfig更容易获取mac地址的方法,即

cat /sys/class/net/eth0/address

我已经在Shell中测试过它(不是通过脚本),并且非常好用:

TEST=`cat /sys/class/net/eth0/address`
touch /tmp/blabla-$TEST

针对你的第二个问题进行编辑

在你的cron脚本中,加入你正在使用的二进制文件的完整路径(即/sbin/ifconfig),或者使用我上面提到的方法 :)


5
 ip addr | grep link/ether | awk '{print $2}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接