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脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++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
