記錄shell指令碼執行的流程及變數的值

來源:互聯網
上載者:User

/*********************************************************************
 * Author  : Samson
 * Date    : 08/17/2012
 * Test platform:
 *               GNU Linux version 2.6.29.4
 *               GNU bash, version 4.0.16(1)-release (i386-redhat-linux-gnu)

 * *******************************************************************/

很多時候,我們都會寫shell程式來完成一些不用重複造輪子的時刻,但是,又因為shell語句中也會有函數,也會有變數,在運行後到底執行了哪些相關的操作,就需要對具體執行過程中的變數等可變的因素的監控,那麼我們下面就寫個小小的shell例子,來完成這個對執行過程中條件陳述式中的變數的變化的監控和整個程式的執行流程的觀察。


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

在命令列中執行:
[root@UFO shellprogram]# ./testexecutelog.sh 0 msglog execlog
在以上的shell指令碼程式中 num1對應的值為命令列中的0  logfile的值為msglog  execlogfile的值為execlog
函數 setlogfile的使用為 setlogfile 記錄檔名,在例子中的使用setlogfile ${execlogfile},函數中的exec 2>> $1;exec 1>> $1表示把標準輸出和標準錯誤輸出的資訊都重新導向到execlog檔案中。
下面我們來看看execlogfile中的內容,就可以看到shell程式的執行流程和執行過程中的變數的值的變化。
[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後的第一個參數決定的。你還可以把第一個參數改為大於0的或小於0的值進行測試。

其中,最重要的一句是set -x,此句的含義為:在每個簡單命令被擴充之後,顯示PS4擴充值,之後是要執行的命令 。 若不執行這句,則不會將執行中變數的實際值列印到execlog中。有關set的使用可man set瞭解更多。

注意:exec 在對檔案描述符進行操作的時候,也只有在這時,exec 不會覆蓋你當前的 shell 環境。也即是不會啟動個新的進程。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.