shell脚本实现串⼝的读取以及报⽂的解析
最近在从串⼝读取报⽂并判断报⽂内容是否有效,本来⽤C++写了⼀个⼩程序。奈何板卡的sftp服务⽼是连不上,于是考虑⽤shell脚本实现这个功能。⽤shell脚本实现这些功能⾯临以下⼏个问题:
1.命令⾏如何设置和读取串⼝?
stty是Linux平台下很好的终端设置⼯具,可以设置各种终端属性。本质上串⼝也是Linux系统中终端的⼀种。所以第⼀步设置串⼝的波特率:
stty -F /dev/ttyO1 raw speed 9600
然后就是读取串⼝,在命令⾏操作时我们⽤cat命令很容易就读取并从终端打印出了串⼝信息,但是在脚本中我们希望将⼀⾏串⼝报⽂读⼊字符串变量中,于是有下⾯的代码:
cat /dev/ttyO1 |while read LINE
shell代码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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。