第16章 Debug Shell指令碼

2021-07-27 02:36:16 字數 1864 閱讀 9304

本章主要介紹一些方便的、有效的、更好的輸出除錯資訊的方法。

本章要學習的知識點

(1)看懂指令碼輸出的錯誤資訊,並逐步定位到真正的錯誤;

(2)如何堅持shell指令碼的語法是否有錯誤;

(3)如何通過track模式找到程式的錯誤;

(4)分析指令碼錯誤的一般步驟;

(5)如何在指令碼程式中新增debug支援。

當我們執行自己編寫的shell指令碼時,經常會遇到指令碼輸出錯誤資訊。錯誤資訊只能說明確實有錯誤發生,但是並不一定告訴我們錯誤所發生的真實原因和出錯位置。因此我們需要對錯誤資訊進行分析和推斷,通常沿著報錯行往前面找。

debug模式是一種檢查錯誤的模式,本節主要介紹3中debug模式:

模式選項

描述語法檢查模式

-n不執行命令,只進行語法檢查

vebose模式

-v列印shell讀取的所有語句

trace模式

-x列印執行替換操作後shell實際執行的命令

進入debug模式的格式:

$/bin/bash –option filename

解決方案:通過執行set命令可以在指令碼的執行過程中開啟或關閉debug模式。

它的使用方法如下:

#開啟trace debug模式

set –x

#關閉trace debug模式

set +x

我們知道通過執行set –x命令可以讓指令碼輸出debug的trace資訊,但是當指令碼交付使用時,刪除或注釋這些命令也很麻煩。因此,希望有乙個開關,通過它控制是否大於debug資訊。可以在指令碼中使用if語句判斷環境變數debug的值,如果等於true就執行set –x命令,如下所示:

#!/bin/bash

if [ 「debug」=」true」]

the

set –x

fi echo 「do stuff…」

if [ 「debug」=」true」]

the

set +x

fi trap通過捕獲執行命令或賦值所產生的偽訊號,可以定位錯誤。在複雜指令碼檔案中,可以很方便檢查錯誤。

shell指令碼執行時,會產生3個「偽訊號」:

訊號名何時產生

exit

從乙個函式中退出時及整個指令碼執行完畢時

err當一條命令執行失敗返回非零狀態時

debug

指令碼中的每一條命令執行之前

trap命令的基本語法格式:

trap `command` signal

案例 trap_debug.sh

#!/bin/bash

#每執行乙個命令,shell都將傳送乙個debug偽訊號

trap 'echo "before execute line:$lineno,a=$a,b=$b,c-$c"' debug

#賦值語句產生debug偽訊號

a=1#命令[產生debug偽訊號

if [ "$a" -eq 1 ];then

#賦值語句產生debug偽訊號

b=2else

#賦值語句產生debug偽訊號

b=1fi

#賦值語句產生debug偽訊號

c=3#命令echo產生debug偽訊號

echo "end"   

執行指令碼trap_debug.sh的結果:

before execute line:7,a=,b=,c-

before execute line:10,a=1,b=,c-

before execute line:12,a=1,b=,c-

before execute line:19,a=1,b=2,c-

before execute line:22,a=1,b=2,c-3

end

高程3總結 第16章HTML5指令碼程式設計

dropeffect屬性只有搭配effectallowed屬性才有用,effectallowed屬性表示允許拖動元素的哪種dropeffect,effectallowed屬性可能的值如下 取得元素的引用 var player document.getelementbyid player btn do...

第16章 檔案服務

ftp 檔案傳輸協議 軟體包 vsftpd ftp埠 控制埠 command 21 tcp 資料埠 data 20 tcp 主動模式 配置檔案 etc vsftpd vsftpd.conf 主目錄 var ftp ftp程式預設分享的乙個本機目錄 yum y install vsftpd 安裝ftp...

第16章 網路程式設計

網路通訊協議 計算機網路中實現通訊必須有一些約定,即通訊協議,對速率 傳輸 結構 傳輸控制步驟 出錯控制等制定標準。通訊協議分層的思想 由於結點之間聯絡很複雜,在制定協議時,把複雜成份分解成一些簡單的成份,再將它們復合起來。最常用的復合方式是層次方式,即同層間可以通訊 上一層可以呼叫下一層,而與再下...