为licheepi Zero USB网络自动分配ip
在使用Zero的usb网络时,由于zero的mac一直变动,每次从新分配ip都很麻烦,随决定祭出脚本
可以看到,每次zero上电后,都会多出一个enx 前缀的网卡
通过ifconfig -a| grep "enx"
可以捕捉到是否有网卡并打印出来
如下需输出
╰─[:)] % ifconfig -a| grep "enx"
enx36bb371c79e6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
然后可以通过 cut裁剪下来
╰─[:)] % echo `ifconfig -a| grep "enx"|cut -d":" -f1`
enx36bb371c79e6
-d 指以指定字符截取,-f1表示输出截取后的第一段信息
提取到网卡名称后,我们就可以愉快的写脚本啦。
首先要判断网卡设备中是否有usb网卡,
提取信息后只有两种可能,空或网卡名,所以可以使用 -n或者-z判断是否空,这里使用-z ,需要注意ubuntu 重启后usb网卡名会变为usb0,也需要加上
[ -z STRING ] 如果STRING的长度为零则为真 ,即判断是否为空,空即是真;
[ -n STRING ] 如果STRING的长度非零则为真 ,即判断是否为非空,非空即是真;
name=`ifconfig -a| grep "enx"|cut -d":" -f1`
name2=`ifconfig -a| grep "usb"|cut -d":" -f1`
if [ -z $name ] && [ -z $name2 ] ;then
echo "Usb Ethernet does not exist,exit~"
exit 0
fi
echo "use Ethernet $name $name2 "
然后就是愉快的ip分配啦
ifconfig $name 192.168.2.1 netmask 255.255.255.0
对于使用nmcli管理的电脑来说,还要取消nmcli托管
sudo nmcli device set $name managed no
然后打印结果~
sudo ifconfig $name3
执行结果如下
(base) ╭─[~]─[lithromantic@ubuntu]─[0]─[797]
╰─[:)] % ./ipusb.sh
use Ethernet enx5a25fe45dd80
enx5a25fe45dd80: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::ed3:aa15:57f9:3c35 prefixlen 64 scopeid 0x20<link>
ether 5a:25:fe:45:dd:80 txqueuelen 1000 (Ethernet)
RX packets 49 bytes 5945 (5.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 281 bytes 44801 (44.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
然后就可以愉快的使用ssh啦
为了方便使用,修改脚本架构
#!/bin/bash
#
# Start usb network....
#
name=`sudo ifconfig -a| grep "enx"|cut -d":" -f1`
name2=`sudo ifconfig -a| grep "usb"|cut -d":" -f1`
name3="$name""$name2"
case "$1" in
start)
if [ -z $name ] && [ -z $name2 ] ;then
echo "Usb Ethernet does not exist,exit~"
exit 0
fi
echo "use Ethernet $name3"
sudo nmcli device set $name managed no
sudo ifconfig $name3 192.168.2.1 netmask 255.255.255.0
sudo ifconfig $name3
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
stop)
printf "Stopping USB network: "
sudo ifconfig $name3 down
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?