当前位置:

首页 > 软件教程 > Linux脚本学习笔记,log函数使用技巧

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

Logic Pro macOS版
Logic Pro macOS版

Logic Pro 是 Apple 为 Mac 打造的专业音乐制作软件,集音频与 MIDI 录制、编曲、节拍制作、采样、混音和母带处理于一体。它提供丰富的软件乐器、效果插件、声音资源以及智能创作工具。

立即下载
¥1298
Mac 2026-10-13
音频工具 音乐制作 数字音频 专业音频处理

本文描述了一个用于记录shell脚本执行日志的日志脚本函数。在进行shell脚本开发时,经常需要监控系统数据。为了方便查看,我们可以将脚本运行情况记录为日志文件,避免需要一直在命令控制台上监视。需求:1、可以记录脚本的运行情况;2、可以记录时间;3、可以在输入log达到一定的行数后对以前的log进行删减,防止log文件无限累积;需求分析这个简单需求可以通过编写一个函数来实现,该函数能够将脚本中的日志信息输出到同名的log文件中,方便开发人员日后查阅分析脚本运行情况。可以根据个人喜好和技术能力选择合适的方式

本文目录

    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

    总结:

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

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 log
    相关文章 更多
    Linux编程环境
    Linux编程环境

    接触Linux编程,首先得摸清它的脾气,理解几个关键点,再熟悉一下手头的工具,才能事半功倍。 一、Linux下的编程环境 在Linux系统的程序设计中,有一些重要特性要特别注意: 1. Linux天生就是多任务系统。同一时刻可以跑很多进程或线程,所以千万别以为你的程序是唯一的实例,同一个用户或不同用

    Linux Shell脚本之流程控制语句举例详解
    Linux Shell脚本之流程控制语句举例详解

    Shell脚本流程控制包含:if/elif/else条件判断实现分支执行;for/while/until循环实现重复任务;case分支选择处理多条件匹配;而break/continue则分别用于跳出当前循环和提前进入下一次循环。这些控制结构共同构成脚本的逻辑基础,使自动化任务灵活高效。

    在Docker中构建长时间运行的脚本的一些方法
    在Docker中构建长时间运行的脚本的一些方法

    文件系统作为持久数据结构:一个被低估的Docker实战技巧 今天要分享的,是一个关于Docker相当实用的应用场景。先别急着认为这又是一篇泛泛而谈Docker优点的文章,咱们的重点其实在于,如何把文件系统本身当作一个可持久化的数据结构来用。 所以,这篇文章的核心思路,并不仅限于Docker或AUFS

    这些操作系统你一定听过!
    这些操作系统你一定听过!

    本文公众号来源:Java建设者作者:cxuan本文已收录至我的GitHub操作系统概念大部分操作系统提供了特定的基础概念和抽象,例如进程、地址空间、文件等,它们是需要理解的核心内容。下面我们会简要介绍一些基本概念,为了说明这些概念,我们会不时的从UNIX中提出示例,相同的示例也会存在于其他系统中,我们后面会进行介绍。进程操作系统一个很关键的概念就是进程(Process)。进程的本质就是操作系统执行的一个程序。与每个进程相关的是地址空间(addressspace),这是从某个最小值的存储位置(通常是

    PowerShell 后门配置 | Windows 安全隐患解析
    PowerShell 后门配置 | Windows 安全隐患解析

    PowerShell控制台与Bash不同,支持多个配置文件。这些配置文件的执行顺序如下:所有用户,所有主机:Windows:$PSHOME\Profile.ps1Linux:/opt/microsoft/powershell/7/profile.ps1macOS:/usr/local/microsoft/powershell/7/profile.ps1所有用户,当前主机:Windows:$PSHOME\Microsoft.PowerShell_profile.ps1Linux:/opt/m

    腾讯文档脚本怎么用?操作教程分享
    腾讯文档脚本怎么用?操作教程分享

    腾讯文档脚本功能基于GoogleAppsScript,通过编写JavaScript代码实现文档自动化操作。1.打开脚本编辑器:通过“工具”->“脚本编辑器”进入编写界面;2.编写脚本:使用JavaScript语言调用GASAPI,例如复制单元格内容;3.运行脚本:点击运行按钮并授权访问权限;4.调试脚本:查看日志排查错误;5.设置触发器:定义脚本自动运行的条件。脚本可实现数据处理、自定义公式、数据验证、批量操作和发送邮件等功能,但需注意安全性问题及学习成本、调试难度和性能限制等局限性。

    Metasploit payload收藏指南
    Metasploit payload收藏指南

    通常Metasploit最有用(对于初学者来说被低估)的功能之一是msfpayload模块。可以使用此模块创建多个有效负载,它有助于在几乎任何情况下为您提供外壳。对于这些有效负载中的每一个,您都可以进入msfconsole并选择exploit/multi/handler。为使用的相关负载运行“设置负载”并配置所有必要的选项(LHOST、LPORT等)。执行并等待有效负载运行。对于下面的示例,它是不言自明的,但LHOST应填写您的IP地址(如果在网络内进行攻击,则为LANIP,如

    PHP 函数和 Shell 函数的区别
    PHP 函数和 Shell 函数的区别

    PHP函数和Shell函数的主要区别在于安全性(PHP函数更安全)、可靠性(Shell函数因操作系统而异)、功能(Shell函数更强大但受shell限制)、性能(PHP函数通常更快)和复杂性(Shell函数更复杂)。它们都用于文件系统、进程和命令操作,但PHP函数是内置的,而Shell函数通过外部shell调用。因此,在服务器文件下载场景中,file_put_contents()函数更安全,而wget命令更灵活。

    Linux帮助命令
    Linux帮助命令

    在本指南中,我们将演示如何在Linux中使用”help”命令。先决条件:要执行本指南中演示的步骤,您需要以下组件:一个功能齐全的Linux系统。出于测试和学习的目的,LinuxVM可以很好地工作。对命令行界面有基本了解帮助命令在使用CLI时,我们通常与一个shell程序进行交互,这个程序充当着操作系统的底层接口。目前,Bash是最常用的shell程序之一,多数Linux系统默认采用Bash作为其shell。“help”命令是Bash的内置shell命令。它用于浏览其他内置命令的sh

    入门级Windows PowerShell脚本指南
    入门级Windows PowerShell脚本指南

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

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?