shell 指令碼的除錯問題

babyyellow發表於2014-03-06
我們之前的shell 指令碼的除錯基本都是echo 來處理

遇到比較大的指令碼的時候,就比較麻煩了,出了問題,還不是很好定位哪行程式碼出問題了。


其實shell 內建的一些變數可以很好的解決這個問題: 

$LINENO  $FUNCNAME $BASH_LINENO 這幾個變數記錄了指令碼當前的執行位置,以及正在執行的函式

具體可以可以man 文件頁。 



程式碼:
a.sh #!/bin/bash 
abc() {echo "wo shi abc()" 
echo  "func: $FUNCNAME  ln: $LINENO ln2:${BASH_LINENO[1]} brother: ${FUNCNAME[1]}" 



b.sh #!/bin/bash
. ./a.sh 
abc
cdf() {
abc
}


執行結果:

[root@node2 ~]# ./b.sh 
wo shi abc()
func: abc  ln: 5 ln2:0 brother: main

wo shi abc()func: abc  ln: 5 ln2:9 brother: cdf

我們在b.sh 裡寫了cdf 函式呼叫 abc 函式 

看到輸出的差別了嗎? 
 我們可以利用這些引數列印出程式碼出錯行的位置,以及 程式碼出錯時,是由哪個函式呼叫的,等等。。。。



接下來,就看自己發揮了。 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-1102544/,如需轉載,請註明出處,否則將追究法律責任。

相關文章