Bash 指令碼除錯

2021-07-29 21:32:51 字數 3033 閱讀 6060

**大神:

bash是unix/linux作業系統最常用的shell之一,它非常靈活,和awk、c++配合起來異常強大

以下使用乙個測試指令碼來說明使用bash除錯的方法

test.sh

#!/bin/bash  

echo "----------------begin-----------------"  

awk ' end' test.sh  

max=3  

for ((i = 0; i < max; i++))  

do  

loaddate=`date -d"-$i day" +%y-%m-%d`  

echo $loaddate  

done  

echo "----------------end-----------------"  

這裡我新增廢話 bash -n test.sh 語法檢查

bash -x列印出指令碼執行過程中的所有語句

like:

$ bash -x test.sh 

+ echo ----------------begin-----------------

----------------begin-----------------

+ awk ' end' test.sh

14+ max=3

+ (( i = 0 ))

+ (( i < max ))

++ date '-d-0 day' +%y-%m-%d

+ loaddate=2013-03-05

+ echo 2013-03-05

2013-03-05

+ (( i++ ))

+ (( i < max ))

++ date '-d-1 day' +%y-%m-%d

+ loaddate=2013-03-04

+ echo 2013-03-04

2013-03-04

+ (( i++ ))

+ (( i < max ))

++ date '-d-2 day' +%y-%m-%d

+ loaddate=2013-03-03

+ echo 2013-03-03

2013-03-03

+ (( i++ ))

+ (( i < max ))

+ echo ----------------end-----------------

----------------end-----------------

配合上注釋,bash -x基本可以滿足日常80%的需求

有的時候,我們的指令碼非常複雜,使用bash -x得到的輸出太多,很難找到需要的資訊

set 可以進行區域性除錯,在需要除錯的**之前加上「set -x」,需要除錯的**之後加上「set +x」即可

like:

修改test.sh:

....

set -x

awk ' end' test.sh

set +x

.....

執行:----------------begin-----------------

+ awk ' end' test.sh

16+ set +x

2013-03-05

2013-03-04

2013-03-03

----------------end-----------------

bashdb是乙個類gdb的除錯工具,使用gdb的同學使用bashdb基本無障礙

bashdb可以執行斷點設定、變數檢視等常見除錯操作

bashdb需要單獨安裝

使用如下:

$ bashdb --debug test.sh            

bash debugger, bashdb, release 4.2-0.8

this is free software, covered by the gnu general public license, and you are

welcome to change it and/or distribute copies of it under certain conditions.

(/home/work/code/test.sh:3):

3:      echo "----------------begin-----------------"

bashdb<0>

n  #下一步

----------------begin-----------------

(/home/work/code/test.sh:5):

5:      awk ' end' test.sh

bashdb<1>

l #列出上下共10行**

1:    #!/bin/bash

2:    

3:    echo "----------------begin-----------------"

4:    

5: => awk ' end' test.sh

6:    

7:    max=3

8:    for ((i = 0; i < max; i++))

9:    do

10:            loaddate=`date -d"-$i day" +%y-%m-%d`

bashdb<2>

b 10 #第10行設定斷點

breakpoint 1 set in file /home/work/code/test.sh, line 10.

bashdb<3> c #繼續執行

14breakpoint 1 hit (1 times).

(/home/work/code/test.sh:10):

10:             loaddate=`date -d"-$i day" +%y-%m-%d`

bashdb<4> 

print $i #列印變數值

014:    echo "----------------end-----------------"

bash指令碼除錯方法

本文全面系統地介紹了shell指令碼除錯技術,包括使用echo,tee,trap等命令輸出關鍵資訊,跟蹤變數的值,在指令碼中植入除錯鉤子,使用 n 選項進行shell指令碼的語法檢查,使用 x 選項實現shell指令碼逐條語句的跟蹤,巧妙地利用shell的內建變數增強 x 選項的輸出資訊等。一.前言...

如何除錯bash指令碼

bash 是linux作業系統的預設shell指令碼。shell是用來處理作業系統和使用者互動的乙個程式。shell的指令碼可以幫助使用者自動化地和作業系統進行互動。你也可以理解為一種指令碼式的程式設計。即然有程式設計,那麼,程式的編譯器,直譯器,偵錯程式就必不可少了,bash也一樣,但在除錯方面可...

如何除錯bash指令碼 codestorm 新浪部落格

bash 是linux作業系統的預設shell指令碼。shell是用來處理作業系統和使用者互動的乙個程式。shell的指令碼可以幫助使用者自動化地和作業系統進行互動。你也可以理解為一種指令碼式的程式設計。即然有程式設計,那麼,程式的編譯器,直譯器,偵錯程式就必不可少了,bash也一樣,但在除錯方面可...