树莓派 shell(ethtool、miitool)判断网口网线是否插好 方法总结

因为最近有需求判断网线是否插在网口,所以特意收集一些资料在这里整理一下,为以后查阅方便在这里做个笔记,如果有相同寻求也可以做个参考(树莓派测试环境):
最初想法是ping网络是否畅通,但是实际需求中可能会出现树莓派同过网线直接连载PC机上在没有网的情况工作,此时网线是插好的,但是网络不通,所以就没办法通过ping网络检测网线是否插好,纠结了一下,就在网上收集shell脚本和C语言两个方向资料

shell脚本方向:

Linux中有ethtool命令可以查看网卡状态
树莓派中默认没有安装这个工具
sudo apt-get install ethtool
下面是执行结果:
1 ethtool eth0

如果插好网线如下图:
树莓派 shell(ethtool、miitool)判断网口网线是否插好 方法总结_第1张图片

根据红色部分判断
如果没插网线如下图:
树莓派 shell(ethtool、miitool)判断网口网线是否插好 方法总结_第2张图片

mii-tool 也是可也查看网线是否插好的一个命令工具
该工具在树莓派上默认安装
执行需要权限 sudo mii-tool
除此之外mii-tool还有很多用法 具体使用方法可以用mii-tool -h来获得在这里就不介绍了

  1. 查看网卡的工作模式,输入命令:
    如果插好网线如下图:
    这里写图片描述
    根据红色部分判断
    如果没插网线如下图:
    这里写图片描述
    上述命令很简单 很容易配合shell 脚本 来判断网线状态,当然也可以配合C语言进行判断,根据实际项目需求来选择,哪个方便就用那个
    这里简述一下我的使用方式,因为基础不好所以使用的很粗糙

checkfile(){
if [ “$1” = “” ];then
return 0
fi
sudo mii-tool |grep “eth0: negotiated 1000baseT-HD flow-control, link ok” |grep -v \”grep\”|wc –l > /home/pi/a.txt”
check_res=
cat /home/pi/a.txt |grep “ 1|grepvgrep|wclif[ check_res -gt 0 ];then
return 1
else
return 0
fi
}

while [ 1 ] ; do
Checkfile “eth0: negotiated 1000baseT-HD flow-control, link ok”
check_result1= ?if[ check_result1 -eq 1 ];then
echo ” Riticle is OK !!! !!!”
else
echo ” Riticle is NO !!! !!!”
done
如果是C语言调用脚本
Unsigned char cmd[]=”sudo mii-tool |grep \”eth0: negotiated 1000baseT-HD flow-control, link ok\” |grep -v \”grep\”|wc –l ` > /home/pi/a.txt”;
System(cmd);
open a.txt read a.txt 查看结果就可以了

你可能感兴趣的:(shell)