为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,也需要加上

Shell if 条件判断_一生只画眉-CSDN博客

[ -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 $?
posted @ 2021-09-01 18:46  USTHzhanglu  阅读(137)  评论(0编辑  收藏  举报