0

0

Linux脚本学习笔记,log函数使用技巧

WBOY

WBOY

发布时间:2024-02-19 17:36:30

|

1409人浏览过

|

来源于每日运维

转载

linux脚本学习笔记,log函数使用技巧

本文描述了一个用于记录shell脚本执行日志的日志脚本函数。在进行shell脚本开发时,经常需要监控系统数据。为了方便查看,我们可以将脚本运行情况记录为日志文件,避免需要一直在命令控制台上监视。

需求:

1、可以记录脚本的运行情况;

2、可以记录时间;

3、可以在输入log达到一定的行数后对以前的log进行删减,防止log文件无限累积;

需求分析

这个简单需求可以通过编写一个函数来实现,该函数能够将脚本中的日志信息输出到同名的log文件中,方便开发人员日后查阅分析脚本运行情况。可以根据个人喜好和技术能力选择合适的方式来实现这一功能。

需求实现:

经过三天三夜的奋战,写出了以下脚本函数:

#!/bin/bash
log(){
#log文件名
local fileName="./$(basename $0 .sh).log"
#log文件最大存储log行数(此处设置最大存储log行数是100行)
local fileMaxLen=100
#超过log最大存储行数后需要从顶部开始删除的行数(此处设置的是删除第1到第10行的数据)
local fileDeleteLen=10
if test $fileName
then
#记录log
echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" >> $fileName
#获取log文件实际行数
loglen=`grep -c "" $fileName`

if [ $loglen -gt $fileMaxLen ]
then
#从顶部开始删除对应行数的log
sed -i '1,'$fileDeleteLen'd' $fileName
fi
else
echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" > $fileName
fi
}


#test
testdate=100
#记录输出的字符串
log "test string"
#记录输出的数据
log "testdate=$testdate"
#记录输出的运算
log $[1+2]
#记录命令输出的信息
log $(printf "this is cmd test %sn" "this is cmd output string")

其中主要的就是log()这个脚本函数,’#test’之后的都是对这个函数的测试;

实现功能:

1、可以快速的加入到当前的脚本中,加入方法:将log()函数复制到在当前的脚本的最前面,然后后面对需要记录的日志直接调用log就可以;

2、加入需要记录日志的脚本后,执行脚本时,会在执行脚本同目录下生成一个同名的.log文件,里面就是执行脚本的日志输出;

3、可以记录脚本运行时间及可对字符串、数据变量、及命令输出的信息进行记录;

4、可以对log文件的行数进行判断,当行数超过最大限制行数后,会从log文件顶部开始删除以前的log记录。

使用示例:

比如要实时查看CPU的温度,就有如下脚本(cputemp.sh):

#!/bin/bash
echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]

在命令控制台使用watch命令可以做到实时监控

watch -n 1 ./cputemp.sh

执行结果如下:

这样是可以实现实时查看,可是为了数据的延续性,所以我加上了log脚本函数,修改了cputemp.sh脚本,如下:

#!/bin/bash
log(){
#log文件名
local fileName="./$(basename $0 .sh).log"
#log文件最大存储log行数(此处设置最大存储log行数是100行)
local fileMaxLen=100
#超过log最大存储行数后需要从顶部开始删除的行数(此处设置的是删除第1到第10行的数据)
local fileDeleteLen=10
if test $fileName
then
#记录log
echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" >> $fileName
#获取log文件实际行数
loglen=`grep -c "" $fileName`

if [ $loglen -gt $fileMaxLen ]
then
#从顶部开始删除对应行数的log
sed -i '1,'$fileDeleteLen'd' $fileName
fi
else
echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" > $fileName
fi
}




echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]
log $(echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000])

使用watch命令循环执行

Batch GPT
Batch GPT

使用AI批量处理数据、自动执行任务

下载
watch -n 1 ./cputemp.sh

执行在命令控制台的结果和之前是一样的,但是现在在同一个文件目录下会生成一个cputemp.log的文件,查看该文件可以发现CPU的温度信息已记录。

使用cat命令查看cputemp.log

cat ./cputemp.log

得到文件内容,如下

从图中可以看出CPU温度在40-41之间波动。

注意事项

1、不能把watch命令写到cputemp.sh脚本里面

这中间还是有一点不完善的地方是,不能把watch命令写到cputemp.sh脚本里面是比较麻烦的,如果把watch命令写到cputemp.sh脚本里面,就会出现执行的温度信息被固定成一个固定值,不能做到实时查看。

如下:

修改的脚本:

#!/bin/bash
watch -n 1 echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]

执行:

./cputemp.sh

执行结果:

从执行结果中可以看到

$[`cat /sys/class/thermal/thermal_zone0/temp`/1000]

被固定成了40,导致每秒循环只是打印

CPU temperature is 40

而不能达到效果,所以目前只能用命令调用脚本的方式了。

2、单引号内引用变量需要嵌套单引号

在使用 sed 命令时用到了单引号(‘’),单引号内需要引用变量时,需要对引用变量嵌套单引号,不然会报错。

sed -i '1,'$fileDeleteLen'd' $fileName

总结:

目前这种实现方式也满足了基本需求。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

205

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1435

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

609

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

547

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

539

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

158

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

77

2025.08.07

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.6万人学习

Linux开发篇视频教程
Linux开发篇视频教程

共18课时 | 3.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号