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(Content Delivery Network)是一种分布式网络架构,旨在为用户提供高效、高质量的内容传送服务。CDN主要通过将内容分发到全球各地的边缘节点,并根据用户的地理位置选择最近的节点来提供内容,从而加速内容的传输并降…...
37.自定义协议
自定义协议要素 1.魔数:用来第一时间判定是否是无效数据包。 2.版本号:主持协议升级。 3.序列化算法:消息正文到底采用那种序列化方式,可以由此扩展,例如:json,protobuf(google的序列化算法,基于二进制,虽然可读性不好,但是字节数占用更少),hessian(基于二进制)…...
【React Native】measureInWindow在安卓上无法正确获取View在屏幕上的布局信息
问题描述: 在React Native中,我们可以使用measureInWindow的方式去获取一个View在屏幕中的位置信息: 下面这个Demo中,我们写了一个页面HomePage和一个列表项组件ListItemA,我们期望每过5s监测一次列表中每一项在屏幕中…...
C++ 教程 - 04 类的使用
文章目录 类的定义类定义案例构造函数 类的定义 C 在 C 语言的基础上增加面向对象编程,类是用于指定对象的形式,是一种用户自定义的数据类型,封装了数据和函数。类可以被看作是一种模板,可以用来创建具有相同属性和行为的多个对象…...
excel按模板文件导出多个文件并压缩为ZIP格式返回前端
思路:先准备好模板文件和与之对应的实体类,数据库数据等,还是之前思路,根据查出的数据,填充模板文件,生成一个临时文件,最后将这些个临时文件打包为zip返回前端,并将多个临时文件删除…...
自动驾驶仿真测试用例表格示例 ACC ELK FCW
自动驾驶仿真测试用例表格示例 测试用例概览 本测试用例表格涵盖了自动驾驶系统中多个关键功能和场景的测试,旨在确保系统在不同条件下的表现和稳定性。 用例编号测试项目测试描述预期结果实际结果通过/失败TC-001ACC功能测试在高速公路上启用ACC,测试车…...
数组 (java)
文章目录 一维数组静态初始化动态初始化 二维数组静态初始化动态初始化 数组参数传递可变参数关于 main 方法的形参 argsArray 工具类sort 中的 comparable 和 comparatorcomparator 比较器排序comparable 自然排序 一维数组 线性结构 静态初始化 第一种:int[] a…...
时序预测 | Matlab基于Transformer多变量时间序列多步预测
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于Transformer多变量时间序列多步预测; 2.多变量时间序列数据集(负荷数据集),采用前96个时刻预测的特征和负荷数据预测未来96个时刻的负荷数据; 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(附下载地址)
文章目录 一.前言二.展示1.启动2.搜索2.服务1.首页2.天气预报3.酒水饮料4.酒水饮料2 3.服务4.灯光5.调音6.排行榜7.分类点歌9.歌手点歌10.歌手个人页 三.心得体会1.关于代码2.关于设计3.关于打包 四.总结 文件大小:33.…...
opencascade AIS_InteractiveContext源码学习2
AIS_InteractiveContext 前言 交互上下文(Interactive Context)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行…...
scale()函数详解
scale()函数是R语言中用于标准化和中心化数据的一个函数。这个函数通常用于数据预处理,以便于后续的分析和建模。下面是对scale()函数的详细介绍: 用法 scale(x, center TRUE, scale TRUE)参数 x: 一个数值型向量、矩阵或数据框,是需要进…...
计算机基础学习有多重要?学哪些?如何学?
计算机基础是我们计算机生涯的开始,而对大学生来说,基础是一方面,更重要的是应对面试。这样说吧,校招:计算机基础占90%,专业知识占10%,社招:计算机基础占20%,专业知识占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 删除本地镜像释放磁盘空间
时间一长,本地镜像文件特别多: 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对话大模型 当前时代巅峰,Microsoft Copilot:https://copilot.microsoft.com AI图片生成 stable diffusion模型资源分享社区,civitai:https…...
vue3页面传参
一,用query传参 方法: router.push({path: ‘路由地址’, query: ‘参数’}) 例子:a页面携带参数跳转到b页面并且b页面拿到a页面传递过来的参数 在路由router.ts配置 a页面: <template><div >a页面</div>…...
多数人支持!微软或把 Xbox 重新品牌化为 XBOX,回归最初形式
Xbox 品牌重塑:从民意调查到账号更名微软 Xbox 首席执行官阿莎夏尔马在 X(原推特)上发起民意调查,询问粉丝微软应使用 Xbox 还是 XBOX,结果多数人支持 XBOX,随后公司将其 X 账号更名。不过,Xbox…...
终极指南:如何在英雄联盟国服免费解锁所有皮肤?R3nzSkin国服特供版完全解析
终极指南:如何在英雄联盟国服免费解锁所有皮肤?R3nzSkin国服特供版完全解析 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 还在…...
PPO 原理与应用
1. PPO 在 RLHF 里到底是干什么的? 在 RLHF 里,我们通常已经有了一个经过 SFT 的模型。这个模型已经比较会回答问题了,但还不一定最符合人类偏好。 于是我们再训练一个 奖励模型 Reward Model,让它模仿人类判断: 这个回…...
模块六-数据合并与连接——32. merge 合并(上)
32. merge 合并(上) 1. 概述 merge 是 Pandas 中最强大的数据合并函数,类似于 SQL 中的 JOIN 操作。它可以根据一个或多个键将两个 DataFrame 的行连接起来。 import pandas as pd import numpy as np# 创建示例数据 # 员工表 employees pd.…...
救砖实录:河南联通B860AV2.1U变砖后,我是如何通过线刷救活的(S905LB+NAND闪存方案)
从绝望到重生:B860AV2.1U机顶盒线刷救砖全流程拆解 那天晚上十一点半,当我第七次按下机顶盒电源键却依然只看到指示灯诡异闪烁时,后背的冷汗已经浸透了T恤——这个价值四百多的联通定制设备,在我尝试刷入第三方固件后彻底变成了一…...
测试驱动开发与持续集成实践指南
测试驱动开发与持续集成实践指南 引言 测试驱动开发(TDD)和持续集成(CI)是现代软件开发中的重要实践。TDD强调先写测试再实现功能,CI确保代码的持续质量和快速反馈。本文将深入探讨TDD的方法论和CI的实践经验。 一、测…...
2026年好用的图片去水印工具有哪些?图片去水印工具推荐盘点
2026年好用的图片去水印工具有哪些?图片去水印工具推荐盘点 说实话,水印虽然能保护原创,但有时候我们也需要对自己拍摄或拥有版权的图片进行处理。比如拍了张好看的图,却被平台的logo挡住了关键部分;或者想要把多个平…...
别再拍脑袋定样本量了!用Excel 5分钟搞定市场调研的样本容量计算(附置信区间模板)
别再拍脑袋定样本量了!用Excel 5分钟搞定市场调研的样本容量计算(附置信区间模板) 在快节奏的商业决策中,市场调研的可靠性往往取决于一个关键数字——样本量。产品经理小张最近就踩了坑:耗时两周完成的500份用户问卷&…...
Win11任务栏小喇叭失踪?别慌!3个亲测有效的修复方法(含重启资源管理器与音频服务)
Win11任务栏音量图标消失?3种专业修复方案与深度解析 刚升级Win11的用户常会遇到一个令人抓狂的小问题——任务栏右下角的音量图标突然"离家出走"。这个看似微不足道的小喇叭,却是我们日常调节系统音量的主要入口。当它消失时,不仅…...
Raspberry Pi Imager终极指南:快速上手树莓派系统安装
Raspberry Pi Imager终极指南:快速上手树莓派系统安装 【免费下载链接】rpi-imager The home of Raspberry Pi Imager, a user-friendly tool for creating bootable media for Raspberry Pi devices. 项目地址: https://gitcode.com/gh_mirrors/rp/rpi-imager …...
