我试图从我的Raspberry Pi中获取mac地址,将mac的最后6个字符用作主机名和固定字符串。
这是迄今为止我设法从其他来源工作的东西,但我现在完全陷入了试图削减字符串。
#!/bin/sh -e
MAC="$( sed "s/^.*macaddr=\([0-9A-F:]*\) .*$/\1/;s/://g" /proc/cmdline )"
MAC1="${MAC??????%}"
echo "$MAC1"
Pi使用的shell似乎是Dash,因此通常的BASH命令可以在任何时候完成,不希望工作或在脚本中运行时产生错误。
我在rc.local中使用的完整脚本如下所示。
任何关于如何做到这一点的建议都将受到极大的欢迎。
MAC="pi""$( sed "s/^.*macaddr=\([0-9A-F:]*\) .*$/\1/;s/://g" /proc/cmdline )"
echo "$MAC" > "/etc/hostname"
CURRENT_HOSTNAME=$(cat /proc/sys/kernel/hostname)
sed -i "s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\t$MAC/g" /etc/hosts
hostname $MAC
答案 0 :(得分:2)
如果你的Pi上有cut
命令,你可以
做
MAC1=$( echo $MAC | cut -c 7-12 )
答案 1 :(得分:0)
由于您已经使用sed处理字符串,我建议添加另一个命令:
MAC=$(sed -e 's/^.*macaddr=\([0-9A-F:]*\) .*$/\1/' \
-e 's/://g' \
-e 's/.*\(.\{6\}\)/\1/' /proc/cmdline)
额外的sed命令从每一行中提取最后6个字符(我假设你只有一个?)。如果您愿意,可以将命令组合成单个字符串,但我发现这种方法更具可读性。