您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“如何用shell腳本實(shí)現(xiàn)監(jiān)控shell腳本的執(zhí)行流程及變量的值”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何用shell腳本實(shí)現(xiàn)監(jiān)控shell腳本的執(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對(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í)行過程中的變量的值的變化。
代碼如下:
[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)程。
到此,相信大家對(duì)“如何用shell腳本實(shí)現(xiàn)監(jiān)控shell腳本的執(zhí)行流程及變量的值”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。