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`

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Raft算法实现的分布式键值对存储系统——学习笔记

目录 1 基于Raft算法实现的分布式键值对存储系统 1.1 模块 2 Raft 算法 2 .1 概念 2.2 raft角色&#xff08;先简单了解&#xff0c;方便后续阅读&#xff09; 2.3 raft想解决什么问题&#xff1f; 2.4 选举领导 2.5 领导者故障 附录&#xff1a; 参考文献&#xff1…

LeetCode 610, 28, 23

目录 610. 判断三角形题目链接表要求知识点思路代码 28. 找出字符串中第一个匹配项的下标题目链接标签使用 i n d e x O f ( ) indexOf() indexOf()思路代码 双指针思路代码 讲一讲双指针的缺点 23. 合并 K 个升序链表题目链接标签思路代码 610. 判断三角形 题目链接 610. 判…

电磁阀厂家:电磁阀结构设计需要考虑哪些方面?

随着科技的不断发展&#xff0c;电磁阀产品的应用范围愈发广泛。但在选购产品时&#xff0c;要注意产品的结构以及设计&#xff0c;以确保产品满足应用场景的各项要求。那么&#xff0c;电磁阀结构设计需要考虑哪些方面&#xff1f;接下来就让专业的电磁阀厂家来为大家简单介绍…

工具函数-算法

1. 实现四舍五入&#xff0c;保留两位小数 const v 0.0635455; // 方式1&#xff0c;保留2位小数&#xff0c;返回的是number格式 const formatted Math.round(v * 100) / 100; // 方式2&#xff0c;保留2位小数&#xff0c;返回的是字符串格式 const formatted v.toFixed(…

Vue67-Vuex简介

因为vuex是插件&#xff0c;所以&#xff0c;使用的时候&#xff1a;vue.use(插件名) 一、Vuex的意义和使用场景 红色的箭头&#xff0c;都是读数据。 若是&#xff0c;B、C、D都想修改A组件中的x数据&#xff08;写&#xff09;&#xff1a;此时&#xff0c;A组件就是数据的接…

人声分离的5个方法分享,从入门到精通,伴奏提取手拿把捏!

人声分离通常是音乐制作、混音和卡拉OK中常用的重要技术之一。它的核心是将乐器伴奏从原始音轨中分离出来&#xff0c;使得用户可以单独处理或重混音频&#xff0c;创造出清晰干净的伴奏轨道。若缺乏强大的音频剪辑软件或专业人声分离工具&#xff0c;这一过程往往会比较困难。…

Redis解析与应用实践

Redis是一个高性能的键值存储系统&#xff0c;它的应用非常广泛&#xff0c;包括缓存、消息队列、排行榜等。本文将深度解析Redis的核心特性&#xff0c;并结合实际代码示例&#xff0c;展示如何在不同场景下应用Redis。 Redis数据类型与操作 Redis支持多种数据类型&#xff…

实用至上:智能体/Agent 是什么

Agent 的起源 不做词义追源&#xff0c;仅从大众角度&#xff0c;这个事儿是去年初开始的&#xff0c;也就是 2023 年 2-3 月。标志性事件包括&#xff1a; AutoGPT 等开源项目的发布&#xff0c;这是第一批基于自然语言的 AI 自动化实践&#xff1a;你告诉它一个任务&#xf…

在 Docker Desktop 上设置 HTTP/HTTPS/SOCKS5 代理

在 Docker Desktop 上设置 HTTP/HTTPS/SOCKS5 代理 在使用 Docker Desktop 时&#xff0c;可能会遇到需要通过代理服务器访问外部网络的情况。本篇博客将会介绍如何在 Linux、Windows 以及 MacOS 上的 Docker Desktop 设置 HTTP/HTTPS 以及 SOCKS5 代理。 在 Linux 上设置代理…

最新的kali Linux源,解决apt update报错说没有数字签名

原因&#xff1a; 国内源的地址大部分都是http开头&#xff0c;这些地址早就无法使用。 解决方案&#xff1a; wget archive.kali.org/archive-key.asc //下载签名 apt-key add archive-key.asc //安装签名 另外&#xff0c;需…

Vscode远程ubuntu

远程连接 到这里vscode远程到ubuntu和关闭远程连接&#xff0c;已完成 配置python环境 在远程目录下新建.vscode隐藏文件夹&#xff0c;文件夹里新建一个 settings.json 文件&#xff0c; 先远程服务器看下conda下的python虚拟环境位置 settings.json位置及内容如下 测试pyt…

M12单端I/O预铸法兰插座A-code

M12单端I/O预铸法兰插座A-code概述 M12单端I/O预铸连接器A-code是一种常用于工业自动化领域的连接器件&#xff0c;主要用于传感器和执行器之间的信号传输。它的设计遵循国际标准IEC 61076-2-101&#xff0c;具有良好的防水防尘性能&#xff0c;通常达到IP67的保护等级。M12连…

2748. 美丽下标对的数目(Rust暴力枚举)

题目 给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c;如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c;则认为 nums[i] 和 nums[j] 是一组 美丽下标对 。 返回 nums 中 美丽下标对 的总…

Linux 之内存管理 -free 和 RSS/RES的意义

一、free -h 计算关系&#xff1a; available free buff/cache total used availbleshared 参数 说明 total 总计物理内存的大小 used 已使用的物理内存的大小 free 可用物理内存有多少 shared 多个进程共享的内存总额 buff/cache 写入和读取 磁盘内存缓冲区的大小 avail…

基于llama3-8B-instruct的调用部署以及lora微调

基于llama3-8B-instruct的调用部署以及lora微调 1 Llama-3-8B-Instruct 基于FastApi 部署调用2 LLaMA3-8B-Instruct langchain 接入3 LaMA3-8B-Instruct 基于streamlit的web demo部署LLaMA3-8B-Instruct Lora 微调参考&#xff1a; 1 Llama-3-8B-Instruct 基于FastApi 部署调用…

linux 压缩命令之tar工具的基本使用

压缩目的: (1)磁盘空间受限,减少空间使用. (2)备份相关资源 (3)减少网络带宽,便于传输 音频压缩和减压 视频压缩和减压 文件压缩和减压: tar可以对多个目录和文件进行打包和压缩 tar常用选项 -c 表示创建用来生成文件包 -x 表示提取,从压缩文件包里面提取文件 -z 使用gzip方…

基础语法——类与对象

每一个类中必须要有构造函数&#xff0c;析构函数&#xff0c;复制赋值运算符函数 构造函数和析构函数 构造函数的名字和类名相同&#xff0c;构造函数没有返回类型。 析构函数的名字由"~""类名"构成。 类接口定义 class STRING{char* pstr; public:ST…

一分钟了解Galaxybase银河图数据库先锋版升级功能!

Galaxybase 银河图数据库是一款创邻科技自主研发的商用图数据库&#xff0c;具有高性能、高可用、企业级安全等特性&#xff0c;支持大规模数据查询实时返回&#xff0c;快速挖掘关联关系&#xff0c;发现深层商业洞见&#xff0c;可广泛应用于金融、能源、电信、政企等行业中的…

Echarts饼图-实现今日进度-动态图

效果预览 本次实现的是一个饼图&#xff0c;蓝色科技背景色&#xff0c;星球转动效果 进度显示。 构建一个动态饼图&#xff0c;采用ECharts&#xff0c;背景为蓝色科技风&#xff0c;有星球转动效果。通过echarts.init初始化&#xff0c;设置图表尺寸和背景色&#xff0c;配…

疯狂刷题python版 | 使用PySide6自制刷题软件【源码+解析】

疯狂刷题python版 | 使用PySide6自制刷题软件【源码解析】 一、前言二、思考三、软件设计四、软件实现&#xff08;一&#xff09;使用QWebEngineView控件通过JavaScript代码和chrome内核进行数据交互和逻辑控制&#xff08;二&#xff09;用户分别通过浏览器 GUI和PySide6 GUI…