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命令循环执行
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
总结:
目前这种实现方式也满足了基本需求。
以上是Linux脚本学习笔记,log函数使用技巧的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

剪映是一款视频编辑工具,带有全面的剪辑功能,支持变速,有多样滤镜和美颜的效果,还有丰富的曲库资源。在这款软件中,可以直接对视频进行剪辑,也可以创建剪辑脚本,但是应该怎么操作呢?本篇教程小编就来介绍一下剪映制作脚本的方法。 制作方法 1、在电脑中点击打开剪映软件,然后找到“创作脚本”选项,点击打开。 2、在创作脚本页面中,输入“脚本标题”,然后在大纲中输入拍摄内容的简介。 3、如何在大纲中就能看到“分镜描述”选项,在框内可以

如何在Linux系统中执行.sh文件?在Linux系统中,.sh文件是一种被称为Shell脚本的文件,用于执行一系列的命令。执行.sh文件是非常常见的操作,本文将介绍如何在Linux系统中执行.sh文件,并提供具体的代码示例。方法一:使用绝对路径执行.sh文件要在Linux系统中执行一个.sh文件,可以使用绝对路径来指定该文件的位置。以下是具体的步骤:打开终

esd文件是Windows操作系统中使用的一种压缩格式,而ISO文件是一种光盘映像文件,用于创建光盘副本或虚拟光驱。当我们需要将esd文件转换为iso文件时,可能是因为ISO文件更常用,更易于使用。下面将为您介绍一些常用的方法来完成这个转换过程。方法一:使用ESDDecrypterESDDecrypter是一款专门用于将esd文件解密并转换为iso文件的

Linux系统下在处理文件时,有时候需要删除文件末尾的行。这种操作在实际应用中很常见,可以通过一些简单的命令来实现。本文将介绍在Linux系统中快速删除文件末尾行的操作步骤,同时提供具体的代码示例。步骤一:查看文件末尾行在进行删除操作之前,首先需要确认文件的末尾行是哪一行。可以使用tail命令来查看文件的末尾行,具体命令如下:tail-n1filena

Linux是一种开源、可移植、可定制的操作系统,它广泛应用于各种领域,如服务器、桌面、嵌入式设备等。Linux的核心是内核,它负责管理硬件资源和提供基本的服务。但是,内核并不是一个独立的实体,它需要一个文件系统来存储和访问各种数据和程序。文件系统是一种组织和管理文件的方法,它定义了文件的名称、位置、属性、权限等信息。在Linux中,有许多不同类型的文件系统,如ext4、xfs、btrfs等,它们各有特点和优势。但是,在所有的文件系统中,有一个特殊的文件系统,它是Linux系统的基础和核心,它就是

为什么win7不能运行bat文件最近,许多使用Windows7操作系统的用户反映他们无法运行.bat文件。这引发了广泛的讨论和疑惑。为什么一个良好运行的操作系统不能运行一个简单的.bat文件呢?首先,我们需要了解一下.bat文件的背景。.bat文件,也称为批处理文件,是一种纯文本文件,包含了一系列的命令,这些命令可以被Windows命令解释器(cmd.ex

我们为初学者设计了这份WindowsPowerShell脚本教程,无论您是技术爱好者还是希望提高脚本编写技能的专业人士。如果你对PowerShell脚本没有先验知识,这篇文章将从基础开始,为您量身定制。我们将帮助您掌握PowerShell环境的安装步骤,并逐步介绍PowerShell脚本的主要概念和功能。如果您已经做好准备,准备深入学习PowerShell脚本编程,那么让我们一起踏上这激动人心的学习之旅吧!什么是WindowsPowerShell?PowerShell是由微软开发的一个混合了命令

如果您是IT管理员或技术专家,您一定意识到自动化的重要性。尤其对于Windows用户来说,MicrosoftPowerShell是最佳的自动化工具之一。微软为满足您的自动化需求提供了各种工具,无需安装第三方应用程序。本指南将详细介绍如何利用PowerShell自动化执行任务。什么是PowerShell脚本?如果您有使用PowerShell的经验,您可能已经使用过命令来配置您的操作系统。脚本是.ps1文件中这些命令的集合。.ps1文件包含由PowerShell执行的脚本,例如基本的Get-Help
