shell腳本實現(xiàn)監(jiān)控shell腳本的執(zhí)行流程及變量的值
很多時候,我們都會寫shell程序來完成一些不用重復(fù)造輪子的時刻,但是,又因為shell語句中也會有函數(shù),也會有變量,在運(yùn)行后到底執(zhí)行了哪些相關(guān)的操作,就需要對具體執(zhí)行過程中的變量等可變的因素的監(jiān)控,那么我們下面就寫個小小的shell例子,來完成這個對執(zhí)行過程中條件語句中的變量的變化的監(jiān)控和整個程序的執(zhí)行流程的觀察。
shell程序代碼:
#!/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í)行:
[root@UFO shellprogram]# ./testexecutelog.sh 0 msglog execlog
在以上的shell腳本程序中 num1對應(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)錯誤輸出的信息都重定向到execlog文件中。
下面我們來看看execlogfile中的內(nèi)容,就可以看到shell程序的執(zhí)行流程和執(zhí)行過程中的變量的值的變化。
[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后的第一個參數(shù)決定的。你還可以把第一個參數(shù)改為大于0的或小于0的值進(jìn)行測試。
其中,最重要的一句是set -x,此句的含義為:在每個簡單命令被擴(kuò)展之后,顯示PS4擴(kuò)展值,之后是要執(zhí)行的命令 。 若不執(zhí)行這句,則不會將執(zhí)行中變量的實際值打印到execlog中。有關(guān)set的使用可man set了解更多。
注意:exec 在對文件描述符進(jìn)行操作的時候,也只有在這時,exec 不會覆蓋你當(dāng)前的 shell 環(huán)境。也即是不會啟動個新的進(jìn)程。
- Shell腳本實現(xiàn)Linux系統(tǒng)和進(jìn)程資源監(jiān)控
- Shell腳本實現(xiàn)監(jiān)控MySQL主從同步
- Shell腳本實現(xiàn)監(jiān)控iptables運(yùn)行狀態(tài)
- Shell腳本實現(xiàn)監(jiān)控rsync數(shù)據(jù)是否傳輸完
- Shell腳本實現(xiàn)監(jiān)控kingate并自動啟動
- Shell腳本實現(xiàn)監(jiān)控iptables規(guī)則是否被修改
- Shell腳本實現(xiàn)memcache緩存命中率監(jiān)控
- 一個監(jiān)控Squid運(yùn)行進(jìn)程數(shù)并自動重啟的簡潔Shell腳本分享
- Shell腳本編寫Nagios插件監(jiān)控程序資源占用
- Linux服務(wù)器硬件運(yùn)行狀態(tài)及故障郵件提醒的監(jiān)控腳本分享
相關(guān)文章
使用scp獲取遠(yuǎn)程linux服務(wù)器上的文件 linux遠(yuǎn)程拷貝文件
scp是secure copy的簡寫,用于在Linux下進(jìn)行遠(yuǎn)程拷貝文件的命令,scp傳輸是加密的,下面看一下詳細(xì)使用方法吧2014-01-01Linux 下sudo網(wǎng)絡(luò)權(quán)限詳解
這篇文章主要介紹了Linux 下sudo網(wǎng)絡(luò)權(quán)限詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05shell腳本自動化創(chuàng)建虛擬機(jī)的基本配置之tomcat--mysql--jdk--maven
這篇文章主要介紹了shell腳本自動化創(chuàng)建虛擬機(jī)的基本配置之tomcat--mysql--jdk--maven的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05完美解決Linux搭建sftp出現(xiàn)Write failed:Broken pipe的問題
下面小編就為大家?guī)硪黄昝澜鉀QLinux搭建sftp出現(xiàn)Write failed:Broken pipe的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06