当前位置: 首页 > news >正文

shell脚本通过解析日志使用串口开关屏知识点整理

#!/bin/bash  
#logPath 写日志的存放路径
#logPath=/home/workspace/tvs/trainborne
logPath=/home/firefly
tmpFile=$$
function getLogName()
{
#echo "$logPath/LCDController_"`date +"%Y%m%d000000.log"`
echo "LCDController_20240424000000.log"
}
# 串口设备文件  
SERIAL_PORT="/dev/ttyS0"  # 设置串口参数  
stty -F $SERIAL_PORT 9600 cs8 -cstopb -parenb  # 要发送的16进制数据,这里以 "48 65 6c 6c 6f"(即 "Hello" 的ASCII码)为例  
OPEN_HEX_DATA="aa aa 80 01 00 00 00 03 00 00 00 08 ff ff 06 01 00 18 02 1d db d3 07 58"  
CLOSE_HEX_DATA="aa aa 80 01 00 00 00 03 00 00 00 08 ff ff 06 01 00 18 01 1E 69 f7 05 21"  # 使用printf发送16进制数据,注意前面加上了'\x'来指定是16进制  
# 这里使用了一个循环来遍历HEX_DATA中的每个值  
closeScreen()
{
#	echo `date +"%Y-%m-%d %H:%M:%S"`" closeScreen" >>tmp.log
echo `date +"%Y-%m-%d %H:%M:%S"`" closeScreen"
OLD_IFS=$IFS  
IFS=' ' # 设置内部字段分隔符为空格  
read -ra ADDR <<< "$CLOSE_HEX_DATA" # 将HEX_DATA分割为一个数组  
IFS=$OLD_IFS # 恢复原始的内部字段分隔符  for byte in "${ADDR[@]}"; do  printf "\\x$byte" > $SERIAL_PORT  
done
}
openScreen()
{echo `date +"%Y-%m-%d %H:%M:%S"`" openScreen" >>tmp.logecho `date +"%Y-%m-%d %H:%M:%S"`" openScreen"
OLD_IFS=$IFS  
IFS=' ' # 设置内部字段分隔符为空格  
read -ra ADDR <<< "$OPEN_HEX_DATA" # 将HEX_DATA分割为一个数组  
IFS=$OLD_IFS # 恢复原始的内部字段分隔符  for byte in "${ADDR[@]}"; do  printf "\\x$byte" > $SERIAL_PORT  
done
}
function Test()
{
closeScreen
sleep 2
openScreen
exit 0
}
echo "执行$0 test 可以测试串口开关屏"
if [ "$1" == "test" ]; thenecho "call test"Testexit 0
fi# 如果你知道发送的数据量并且想要一次发送所有字节(注意:这可能在某些shell中不起作用)  
# echo -ne '\x48\x65\x6c\x6c\x6f' > $SERIAL_PORT  
# 注意:上面的-ne选项在bash中是有效的,但在某些shell中可能不支持  # 读取并显示来自串口的响应(如果需要的话)  
# cat $SERIAL_PORT
log=$(getLogName)
grep -rn "trun on" $log |awk '{print $1}'> $tmpFile
i=0
while read -r value;
do
strArray["$i"]="$value" 
i=$((i+1))
done < $tmpFile
rm $tmpFile
i=$((i-1))
if [ $i -ne "-1" ]; thentmp=${strArray[$i]}tmp=`echo $tmp|cut -d':' -f1`i=$((tmp+8))tmp=`sed -n "$i"p $log`tmpDate=`echo $tmp|cut -d'.' -f1`timeStampTmp=`date -d "$tmpDate" +%s`now=`date`timeStampNow=`date -d "$now" +%s`diff=$((timeStampNow-timeStampTmp))if [ $diff -lt 60 ]; thenecho `date +"%Y-%m-%d %H:%M:%S"`" grep string $tmp" >tmp.logecho `date +"%Y-%m-%d %H:%M:%S"`" grep string $tmp"tmp=`echo $tmp|cut -d':' -f6`if [ $tmp == 31 ]; thenecho "open screen" >> tmp.logopenScreenelseecho "close screen" >> tmp.logcloseScreenfifi
fi
exit 0

函数返回字符串可以用echo 来实现

使用时log=$(getLogName),一定要用$()才可以,不然getLogName就会被当成字符串

但是这样调用函数时,函数内不能正常使用echo 打印调试内容。

shell 可以直接操作串口,使用stty 设置串口参数

echo `date +"%Y-%m-%d %H:%M:%S"`" closeScreen"

日期格式输出date +"%Y-%m-%d %H:%M:%S
OLD_IFS=$IFS  
IFS=' ' # 设置内部字段分隔符为空格  
read -ra ADDR <<< "$CLOSE_HEX_DATA" # 将一串包含空格的数据分割为一个数组保存  
IFS=$OLD_IFS # 恢复原始的内部字段分隔符  
  
for byte in "${ADDR[@]}"; do  
    printf "\\x$byte" > $SERIAL_PORT  
done

使用printf发送16进制数据,注意前面加上了'\x'来指定是16进制,例要发16进制AB到串口,就要发字符串\xAB,\x又要用\\x来表示,所以是'\\xAB'

把awk的结果定到文件,再读取文件数据内容保存到数组中

while read -r value;
do
strArray["$i"]="$value" 
i=$((i+1))
done < $tmpFile

$(())可以用来直接进行数学运算,变量在里面直接用

访问数组元素tmp=${strArray[$i]}

单独显示文件特定行内容

tmp=`sed -n "$i"p $log`

把时间的字符串换算成跟1970年的时间的秒数,方便进行比较时间差

timeStampTmp=`date -d "$tmpDate" +%s`

相关文章:

shell脚本通过解析日志使用串口开关屏知识点整理

#!/bin/bash #logPath 写日志的存放路径 #logPath/home/workspace/tvs/trainborne logPath/home/firefly tmpFile$$ function getLogName() { #echo "$logPath/LCDController_"date "%Y%m%d000000.log" echo "LCDController_20240424000000.log&quo…...

速盾:视频cdn和网站cdn的相同点与不同点

CDN&#xff08;Content Delivery Network&#xff09;是一种分布式网络架构&#xff0c;旨在为用户提供高效、高质量的内容传送服务。CDN主要通过将内容分发到全球各地的边缘节点&#xff0c;并根据用户的地理位置选择最近的节点来提供内容&#xff0c;从而加速内容的传输并降…...

37.自定义协议

自定义协议要素 1.魔数:用来第一时间判定是否是无效数据包。 2.版本号:主持协议升级。 3.序列化算法:消息正文到底采用那种序列化方式,可以由此扩展,例如:json,protobuf(google的序列化算法,基于二进制,虽然可读性不好,但是字节数占用更少),hessian(基于二进制)…...

【React Native】measureInWindow在安卓上无法正确获取View在屏幕上的布局信息

问题描述&#xff1a; 在React Native中&#xff0c;我们可以使用measureInWindow的方式去获取一个View在屏幕中的位置信息&#xff1a; 下面这个Demo中&#xff0c;我们写了一个页面HomePage和一个列表项组件ListItemA&#xff0c;我们期望每过5s监测一次列表中每一项在屏幕中…...

C++ 教程 - 04 类的使用

文章目录 类的定义类定义案例构造函数 类的定义 C 在 C 语言的基础上增加面向对象编程&#xff0c;类是用于指定对象的形式&#xff0c;是一种用户自定义的数据类型&#xff0c;封装了数据和函数。类可以被看作是一种模板&#xff0c;可以用来创建具有相同属性和行为的多个对象…...

excel按模板文件导出多个文件并压缩为ZIP格式返回前端

思路&#xff1a;先准备好模板文件和与之对应的实体类&#xff0c;数据库数据等&#xff0c;还是之前思路&#xff0c;根据查出的数据&#xff0c;填充模板文件&#xff0c;生成一个临时文件&#xff0c;最后将这些个临时文件打包为zip返回前端&#xff0c;并将多个临时文件删除…...

自动驾驶仿真测试用例表格示例 ACC ELK FCW

自动驾驶仿真测试用例表格示例 测试用例概览 本测试用例表格涵盖了自动驾驶系统中多个关键功能和场景的测试&#xff0c;旨在确保系统在不同条件下的表现和稳定性。 用例编号测试项目测试描述预期结果实际结果通过/失败TC-001ACC功能测试在高速公路上启用ACC&#xff0c;测试车…...

数组 (java)

文章目录 一维数组静态初始化动态初始化 二维数组静态初始化动态初始化 数组参数传递可变参数关于 main 方法的形参 argsArray 工具类sort 中的 comparable 和 comparatorcomparator 比较器排序comparable 自然排序 一维数组 线性结构 静态初始化 第一种&#xff1a;int[] a…...

时序预测 | Matlab基于Transformer多变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于Transformer多变量时间序列多步预测&#xff1b; 2.多变量时间序列数据集&#xff08;负荷数据集&#xff09;&#xff0c;采用前96个时刻预测的特征和负荷数据预测未来96个时刻的负荷数据&#xff1b; 3…...

suuk-s.php.jpg-python 库劫持

做virtualBox的端口映射吧 suukmedim文件白名单绕过、反弹shell、$paht环境变量更改、python 库劫持提权、Reptile提权、sandfly-processdecloak使用 服务扫描 ┌──(kali㉿kali)-[~] └─$ sudo nmap -sV -A -T 4 -p 22,80 192.168.18.238GetSHell 访问80http://192.168.…...

python3GUI--ktv点歌软件By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.启动2.搜索2.服务1.首页2.天气预报3.酒水饮料4.酒水饮料2 3.服务4.灯光5.调音6.排行榜7.分类点歌9.歌手点歌10.歌手个人页 三&#xff0e;心得体会1.关于代码2.关于设计3.关于打包 四&#xff0e;总结 文件大小&#xff1a;33.…...

opencascade AIS_InteractiveContext源码学习2

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…...

scale()函数详解

scale()函数是R语言中用于标准化和中心化数据的一个函数。这个函数通常用于数据预处理&#xff0c;以便于后续的分析和建模。下面是对scale()函数的详细介绍&#xff1a; 用法 scale(x, center TRUE, scale TRUE)参数 x: 一个数值型向量、矩阵或数据框&#xff0c;是需要进…...

计算机基础学习有多重要?学哪些?如何学?

计算机基础是我们计算机生涯的开始&#xff0c;而对大学生来说&#xff0c;基础是一方面&#xff0c;更重要的是应对面试。这样说吧&#xff0c;校招&#xff1a;计算机基础占90%&#xff0c;专业知识占10%&#xff0c;社招&#xff1a;计算机基础占20%&#xff0c;专业知识占8…...

Oracle day9

------------------------------------------------------------------------------------ --创建用户 create user test1 identified by 123456; create user ZJun identified by 888888; --授予权限 grant create session to test1; grant create session to ZJun; --删除用…...

Race Condition竞争条件

Race Condition Question – why was there no race condition in the first solution (where at most N – 1) buffers can be filled?Processes P0 and P1 are creating child processes using the fork() system callRace condition on kernel variable next_available_pid…...

docker 删除本地镜像释放磁盘空间

时间一长&#xff0c;本地镜像文件特别多&#xff1a; 1 linux 配置crontab 定期删除 crontab l 查看 crontab e 编辑 30 3 * * * /home/mqq/gengmingming/cleanImage-realize.sh > /home/mqq/gengmingming/cleanImage-realize.log 2>&12 cleanImage-realize.sh …...

JVM中的垃圾回收器

文章目录 垃圾回收器发展史垃圾回收器分类按线程数分类按工作模式分类按处理方式分类 查看默认垃圾收集器评估垃圾回收器性能指标吞吐量暂停时间吞吐量对比暂停时间 7种经典的垃圾回收器垃圾回收器与垃圾分代垃圾收集器的组合关系Serial GCParNew GCParallel Scavenge GCSerial…...

记录一些可用的AI工具网站

记录一些可用的AI工具网站 AI对话大模型AI图片生成AI乐曲生成AI视频生成AI音频分离 AI对话大模型 当前时代巅峰&#xff0c;Microsoft Copilot&#xff1a;https://copilot.microsoft.com AI图片生成 stable diffusion模型资源分享社区&#xff0c;civitai&#xff1a;https…...

vue3页面传参

一&#xff0c;用query传参 方法&#xff1a; router.push({path: ‘路由地址’, query: ‘参数’}) 例子&#xff1a;a页面携带参数跳转到b页面并且b页面拿到a页面传递过来的参数 在路由router.ts配置 a页面&#xff1a; <template><div >a页面</div>…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...