主頁(yè) > 知識(shí)庫(kù) > shell腳本實(shí)現(xiàn)監(jiān)控shell腳本的執(zhí)行流程及變量的值

shell腳本實(shí)現(xiàn)監(jiān)控shell腳本的執(zhí)行流程及變量的值

熱門標(biāo)簽:網(wǎng)站排名優(yōu)化 鐵路電話系統(tǒng) 呼叫中心市場(chǎng)需求 AI電銷 服務(wù)外包 百度競(jìng)價(jià)排名 地方門戶網(wǎng)站 Linux服務(wù)器

很多時(shí)候,我們都會(huì)寫shell程序來完成一些不用重復(fù)造輪子的時(shí)刻,但是,又因?yàn)閟hell語句中也會(huì)有函數(shù),也會(huì)有變量,在運(yùn)行后到底執(zhí)行了哪些相關(guān)的操作,就需要對(duì)具體執(zhí)行過程中的變量等可變的因素的監(jiān)控,那么我們下面就寫個(gè)小小的shell例子,來完成這個(gè)對(duì)執(zhí)行過程中條件語句中的變量的變化的監(jiān)控和整個(gè)程序的執(zhí)行流程的觀察。

shell程序代碼:

復(fù)制代碼 代碼如下:

#!/bin/bash
function setlogfile
{
    if ! [ -z "$1" ]; then
        echo "logfilename is not empty!" >> kthh
        exec 2>> $1
        exec 1>> $1
    fi   
}

num1=$1
logfile=$2
execlogfile=$3

setlogfile ${execlogfile}
set -x
if [ $num1 -eq 0 ]; then
    echo "num1 is 0">> ${logfile}
elif [ $num1 -ge 0 ]; then
    echo "num1 is grate 0">> ${logfile}
else
    echo "num1 is less 0">> ${logfile}
fi
/sbin/shutdown -k 10
if [ $num1 -eq 0 ]; then
    echo "num1 is 0 again">> ${logfile}
fi


在命令行中執(zhí)行:
復(fù)制代碼 代碼如下:

[root@UFO shellprogram]# ./testexecutelog.sh 0 msglog execlog

在以上的shell腳本程序中 num1對(duì)應(yīng)的值為命令行中的0  logfile的值為msglog  execlogfile的值為execlog。

函數(shù) setlogfile的使用為 setlogfile 日志文件名,在例子中的使用setlogfile ${execlogfile},函數(shù)中的exec 2>> $1;exec 1>> $1表示把標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出的信息都重定向到execlog文件中。

下面我們來看看execlogfile中的內(nèi)容,就可以看到shell程序的執(zhí)行流程和執(zhí)行過程中的變量的值的變化。

復(fù)制代碼 代碼如下:

[root@UFO shellprogram]# cat execlog
+ '[' 0 -eq 0 ']'
+ echo 'num1 is 0'
+ /sbin/shutdown -k 10
+ '[' 0 -eq 0 ']'
+ echo 'num1 is 0 again'

可見,程序中的流程是和./testexecutelog.sh后的第一個(gè)參數(shù)決定的。你還可以把第一個(gè)參數(shù)改為大于0的或小于0的值進(jìn)行測(cè)試。

其中,最重要的一句是set -x,此句的含義為:在每個(gè)簡(jiǎn)單命令被擴(kuò)展之后,顯示PS4擴(kuò)展值,之后是要執(zhí)行的命令 。 若不執(zhí)行這句,則不會(huì)將執(zhí)行中變量的實(shí)際值打印到execlog中。有關(guān)set的使用可man set了解更多。

注意:exec 在對(duì)文件描述符進(jìn)行操作的時(shí)候,也只有在這時(shí),exec 不會(huì)覆蓋你當(dāng)前的 shell 環(huán)境。也即是不會(huì)啟動(dòng)個(gè)新的進(jìn)程。

您可能感興趣的文章:
  • Shell腳本實(shí)現(xiàn)Linux系統(tǒng)和進(jìn)程資源監(jiān)控
  • Shell腳本實(shí)現(xiàn)監(jiān)控MySQL主從同步
  • Shell腳本實(shí)現(xiàn)監(jiān)控iptables運(yùn)行狀態(tài)
  • Shell腳本實(shí)現(xiàn)監(jiān)控rsync數(shù)據(jù)是否傳輸完
  • Shell腳本實(shí)現(xiàn)監(jiān)控kingate并自動(dòng)啟動(dòng)
  • Shell腳本實(shí)現(xiàn)監(jiān)控iptables規(guī)則是否被修改
  • Shell腳本實(shí)現(xiàn)memcache緩存命中率監(jiān)控
  • 一個(gè)監(jiān)控Squid運(yùn)行進(jìn)程數(shù)并自動(dòng)重啟的簡(jiǎn)潔Shell腳本分享
  • Shell腳本編寫Nagios插件監(jiān)控程序資源占用
  • Linux服務(wù)器硬件運(yùn)行狀態(tài)及故障郵件提醒的監(jiān)控腳本分享

標(biāo)簽:蘭州 銅川 衡水 湖南 湘潭 崇左 仙桃 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《shell腳本實(shí)現(xiàn)監(jiān)控shell腳本的執(zhí)行流程及變量的值》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266