自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux腳本學習筆記,log函數使用技巧

系統(tǒng) Linux
本文主要講述的是一個關于記錄shell腳本執(zhí)行日志的日志腳本函數,在做shell腳本開發(fā)的過程中,常常要運行腳本來監(jiān)測一些系統(tǒng)數據,但是我們又沒有很多時間來一直盯著命令控制臺看,所以看能不能把這些腳本運行的情況記錄成一個日志并保存下來,方便我們有時間的時候查看。

本文主要講述的是一個關于記錄shell腳本執(zhí)行日志的日志腳本函數,在做shell腳本開發(fā)的過程中,常常要運行腳本來監(jiān)測一些系統(tǒng)數據,但是我們又沒有很多時間來一直盯著命令控制臺看,所以看能不能把這些腳本運行的情況記錄成一個日志并保存下來,方便我們有時間的時候查看。

需求:

1、可以記錄腳本的運行情況

2、可以記錄時間

3、可以在輸入log達到一定的行數后對以前的log進行刪減,防止log文件無限累積

需求分析

需求很簡單,想想看好像有很多方式可以實現,最終結合個人喜好和技術能力,選擇編寫一個運行在shell腳本里面的函數;這個函數的作用是將shell腳本中需要輸出的日志信息,輸出成與腳本同名的log文本,記錄在系統(tǒng)中,方便開發(fā)人員在空閑時間進行查閱,分析腳本的運行情況。

需求實現:

經過三天三夜的奮戰(zhàn),寫出了以下腳本函數:

#!/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 %s\n" "this is cmd output string")

其中主要的就是log()這個腳本函數,'#test’之后的都是對這個函數的測試。

實現功能:

1、可以快速的加入到當前的腳本中,加入方法:將log()函數復制到在當前的腳本的最前面,然后后面對需要記錄的日志直接調用log就可以;

2、加入需要記錄日志的腳本后,執(zhí)行腳本時,會在執(zhí)行腳本同目錄下生成一個同名的.log文件,里面就是執(zhí)行腳本的日志輸出;

3、可以記錄腳本運行時間及可對字符串、數據變量、及命令輸出的信息進行記錄;

4、可以對log文件的行數進行判斷,當行數超過最大限制行數后,會從log文件頂部開始刪除以前的log記錄。

使用示例:

比如要實時查看CPU的溫度,就有如下腳本(cputemp.sh):

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

在命令控制臺使用watch命令可以做到實時監(jiān)控:

watch -n 1 ./cputemp.sh

執(zhí)行結果如下:

這樣是可以實現實時查看,可是為了數據的延續(xù)性,所以我加上了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命令循環(huán)執(zhí)行:

watch -n 1 ./cputemp.sh

執(zhí)行在命令控制臺的結果和之前是一樣的,但是現在在同一個文件目錄下會生成一個cputemp.log的文件,查看該文件可以發(fā)現CPU的溫度信息已記錄。

使用cat命令查看cputemp.log:

cat ./cputemp.log

得到文件內容,如下:

從圖中可以看出CPU溫度在40-41之間波動。

注意事項

1、不能把watch命令寫到cputemp.sh腳本里面

這中間還是有一點不完善的地方是,不能把watch命令寫到cputemp.sh腳本里面是比較麻煩的,如果把watch命令寫到cputemp.sh腳本里面,就會出現執(zhí)行的溫度信息被固定成一個固定值,不能做到實時查看。

如下:

修改的腳本:

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

執(zhí)行:

./cputemp.sh

執(zhí)行結果:

從執(zhí)行結果中可以看到:

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

被固定成了40,導致每秒循環(huán)只是打?。?/p>

CPU temperature is 40

而不能達到效果,所以目前只能用命令調用腳本的方式了。

2、單引號內引用變量需要嵌套單引號

在使用 sed 命令時用到了單引號(‘’),單引號內需要引用變量時,需要對引用變量嵌套單引號,不然會報錯。

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

總結:

目前這種實現方式也滿足了基本需求。

責任編輯:華軒 來源: 微技術之家
相關推薦

2010-08-31 16:35:59

CSS

2010-09-26 14:01:10

JVM Log

2009-09-01 11:28:32

C#使用函數重載

2010-07-23 14:04:43

Perl grep函數

2009-10-30 10:40:59

2011-08-08 14:57:46

iPhone Autoreleas Property

2010-07-20 10:58:39

Perl腳本

2011-08-19 15:16:41

XCodeUserScripts腳本

2009-08-28 10:48:00

linux操作系統(tǒng)linux學習掃瞄

2010-07-21 14:18:27

Perl函數

2010-07-19 15:31:10

Perl關聯數組函數

2011-08-19 15:48:13

SQL Server 結果集Sets使用技巧

2009-08-28 10:49:31

linux操作系統(tǒng)linux學習帳號管理

2009-08-28 10:51:21

linux操作系統(tǒng)linux學習SHELL

2009-08-28 10:53:57

linux操作系統(tǒng)linux學習VI

2016-11-08 15:33:58

Linuxchmod學習筆記

2009-08-28 10:45:57

2009-08-28 10:57:42

linux操作系統(tǒng)linux學習目錄架構

2010-07-26 15:55:51

Perl腳本語言

2016-12-27 14:59:50

得分函數參數
點贊
收藏

51CTO技術棧公眾號