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

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

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

需求:

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

2、可以记录时间;

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

需求分析

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

需求实现:

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

#!/bin/bashlog(){#log文件名local fileName="./$(basename $0 .sh).log"#log文件最大存储log行数(此处设置最大存储log行数是100行)local fileMaxLen=100#超过log最大存储行数后需要从顶部开始删除的行数(此处设置的是删除第1到第10行的数据)local fileDeleteLen=10if test $fileNamethen#记录logecho "[`date +%y/%m/%d-%H:%M:%S`]:$*" >> $fileName#获取log文件实际行数loglen=`grep -c "" $fileName`if [ $loglen -gt $fileMaxLen ]then#从顶部开始删除对应行数的logsed -i '1,'$fileDeleteLen'd' $fileNamefielseecho "[`date +%y/%m/%d-%H:%M:%S`]:$*" > $fileNamefi}#testtestdate=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/bashecho CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]

登录后复制

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

watch -n 1 ./cputemp.sh

登录后复制登录后复制

执行结果如下:

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

#!/bin/bashlog(){#log文件名local fileName="./$(basename $0 .sh).log"#log文件最大存储log行数(此处设置最大存储log行数是100行)local fileMaxLen=100#超过log最大存储行数后需要从顶部开始删除的行数(此处设置的是删除第1到第10行的数据)local fileDeleteLen=10if test $fileNamethen#记录logecho "[`date +%y/%m/%d-%H:%M:%S`]:$*" >> $fileName#获取log文件实际行数loglen=`grep -c "" $fileName`if [ $loglen -gt $fileMaxLen ]then#从顶部开始删除对应行数的logsed -i '1,'$fileDeleteLen'd' $fileNamefielseecho "[`date +%y/%m/%d-%H:%M:%S`]:$*" > $fileNamefi}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命令循环执行

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/bashwatch -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

登录后复制

总结:

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

以上就是Linux脚本学习笔记,log函数使用技巧的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2291226.html

(0)
上一篇 2025年2月28日 00:52:16
下一篇 2025年2月28日 00:52:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Linux服务器常见的日志文件存储位置!

      在Linux服务器中,日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等,其有着非常重要的作用。那么Linux中服务器日志存放在什么位置?以下…

    2025年2月28日
    200
  • 自动化安装MySQL数据库的Shell脚本

    本文主要通过shell脚本语言的方式自动化安装mysql数据库,从而提高我们的工作效率。 大致思路及步骤如下: 第一步:首先,自定义MySQL数据库的安装目录、MySQL数据存储目录和MySQL数据库超级用户的密码变量。 #!/bin/ba…

    2025年2月28日
    200
  • Linux Shell编程:基础、应用与最佳实践

    你是否曾经想过,如何通过编写简单的脚本来自动化你的日常任务,提高工作效率? 在Linux操作系统下,Shell编程为你提供了这样的机会。 本文将引领您进入Shell编程的世界,涵盖基础知识、常见应用和最佳实践,帮助您轻松掌握Shell编程的…

    2025年2月28日
    200
  • 如何使用PowerShell自动执行任务

    如果您是it管理员或技术专家,您一定意识到自动化的重要性。尤其对于windows用户来说,microsoft powershell 是最佳的自动化工具之一。微软为满足您的自动化需求提供了各种工具,无需安装第三方应用程序。本指南将详细介绍如何…

    2025年2月28日 互联网
    200
  • Linux 中的文件锁定命令:flock、fcntl、lockfile、flockfile 详细教程!

    在Linux中,有几种常用的文件锁定命令,包括flock、fcntl、lockfile和flockfile。这些命令用于在多进程或多线程环境中对文件进行互斥访问。下面是这些命令的详细教程: flock命令: flock命令可以在Shell脚…

    2025年2月27日
    200
  • Linux入门指南:轻松掌握基础,开启你的快乐之旅!

    写在前面 嗨,亲爱的读者们!今天这篇文章可能没有什么惊喜,可能会让一些渴望实用信息的朋友们感到略微失望。 不要泄气,明天就会有更多有用的信息!今天让我们愉快地回顾一下Linux的基础知识,为您带来一些轻松的开胃菜。 话说,我在IT行业摸爬滚…

    2025年2月27日
    100
  • Linux shell脚本中特殊字符含义有哪些

    在linux shell脚本中,预定义了一些特殊参数,它们分别代表不同的含义和返回值,下面逐一进行总结。 1. 【$0】:脚本名 $0返回当前执行的shell脚本的名称。 2.【1-9】:命令行参数1到9 $1-$9这9个分别代表脚本执行命…

    2025年2月27日
    200
  • 如何检查Linux中进程运行了多长时间

    进程的运行时间是指进程自启动以来所经过的时间。 检查进程的运行时间可以帮助我们确定系统中哪些进程已经运行了多长时间。这对于识别导致系统响应变慢和系统资源占用过高的问题至关重要。 我们及时发现并处理这些长时间运行的进程,可以提高系统的稳定性和…

    2025年2月27日
    200
  • 面向初学者的Windows PowerShell脚本教程

    我们为初学者设计了这份windows powershell脚本教程,无论您是技术爱好者还是希望提高脚本编写技能的专业人士。如果你对powershell脚本没有先验知识,这篇文章将从基础开始,为您量身定制。 我们将帮助您掌握PowerShel…

    2025年2月27日
    200
  • 如何使用Windows配置设计器安装代理

    为最终用户设置新的工作站需要花费大量时间。通过自动化和结构化方法的应用,可以减少工作站部署的复杂性。要管理windows工作站和计算机,首先要安装windows代理。本文将介绍如何使用windows configuration design…

    2025年2月27日
    200

发表回复

登录后才能评论