shell脚本实现串口的读取以及报文的解析
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
最近在从串口读取报文并判断报文内容是否有效,本来用C++写了一个小程序。奈何板卡的sftp服务老是连不上,于是考虑用shell脚本实现这个功能。用shell脚本实现这些功能面临以下几个问题:
1.命令行如何设置和读取串口?
stty是Linux平台下很好的终端设置工具,可以设置各种终端属性。本质上串口也是Linux系统中终端的一种。所以第一步设置串口的波特率:
stty -F /dev/ttyO1 raw speed 9600
然后就是读取串口,在命令行操作时我们用cat命令很容易就读取并从终端打印出了串口信息,但是在脚本中我们希望将一行串口报文读入字符串变量中,于是有下面的代码:
cat /dev/ttyO1 | while read LINE
do
echo LINE
#do something
...
done
2.如何截取字符串和比较字符串?
str="hello world"
#截取hello
h=${str:0:5}
#第一个:后面是表示位置;第二个:后面的数字表示字符数量
#字符串的比较有很多种方法,下面是其中的一种
if [ $h == 'hello' ]; then
#do something
...
fi
3.如何在shell脚本中计数
shell脚本中的变量默认都是字符串,所以我们申明变量时要显式的赋值:
num=0
#给num加1
num=`expr $num + 1`
#判断num是否大于10
if [ $num -ge 10 ]; then
#do something
...
fi
4.脚本实现
脚本实现读取串口报文,截取报文头和有效为并判断,判断通过后计数器加1,计时器超过10后程序退出;
#!/bin/sh
stty -F /dev/ttyO1 raw speed 9600
num=0
cat /dev/ttyO1 | while read LINE
do
head=${LINE:0:6}
valid = ${LINE:17:1}
if [ $head == '$GPRMC' ] && [ $valid == 'A' ]; then
echo $num
num = `expr $num + 1`
if [ $num -ge 10 ]; then
exit
fi
fi
done
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献1条内容
所有评论(0)