Shell 調(diào)試腳本 簡介

Shell 腳本調(diào)試的主要工作是發(fā)現(xiàn)腳本的錯誤的原因,以及定位腳本中發(fā)生錯誤的行。Bash 提供了多種腳本調(diào)試的功能。但是比較常用的是使用 Bash 的 -x 選項啟動一個子 Shell,它將以調(diào)試模式運行整個腳本,使 Shell 在執(zhí)行腳本的過程中把實際執(zhí)行的每一個命令行顯示出來,并且在命令行的行首顯示一個 “+” 號,“+” 號后面顯示的是經(jīng)過了參數(shù)擴展的命令行的內(nèi)容。這將有助于分析實際執(zhí)行的是什么命令。

Bash 的執(zhí)行選項還可以在腳本中通過 let 命令來指定?!皊et -選項”表示啟動某選項,“set +選項”表示關(guān)閉某選項。所以我們可以在 Shell 腳本中使用 “set -x” 和 “set +x” 命令來調(diào)試腳本中的某一段代碼。

Bash 中還有一個 “-v” 選項,該選項將激活詳細輸出模式,在這一模式中,由 Bash 讀入的每一行命令都將在執(zhí)行前被打印,包括注釋行。

定制輸出信息
$LINENO —— Bash 內(nèi)部環(huán)境變量,表示 Shell 腳本的當(dāng)前行號。
$FUNCNAME —— Bash 內(nèi)部環(huán)境變量,它是一個包含了當(dāng)前在執(zhí)行調(diào)用堆棧中的所有 Shell 函數(shù)名稱的數(shù)組變量。${FUNCNAME[0]} 代表當(dāng)前正在執(zhí)行的 Shell 函數(shù)的名稱,${FUNCNAME[1]} 則代表調(diào)用函數(shù)
${FUNCNAME[0]} 的函數(shù)的名字,依次類推。
$PS4 —— Bash 內(nèi)部環(huán)境變量,在使用 Bash 的 -x 選項時,每一條實際執(zhí)行的命令的行首會顯示一個 “+” 號,這個 “+” 號其實就是變量 $PS4 的默認值。

利用 $PS4 變量,再結(jié)合 $LINENO$FUNCNAME 兩個內(nèi)部變量,通過重新定義變量 $PS4,可以增強 -x 選項的輸出信息。我們可以在執(zhí)行腳本之前先執(zhí)行下面的語句:

export PS4=`+{$LINENO:${FUNCNAME[0]}}`

使用示例:


定制輸出信息

Bash 中還有一個執(zhí)行選項 -n,他可以用于測試 Shell 腳本中是否存在語法錯誤,它會讀取腳本中的命令行但是不會執(zhí)行它們。

本文參考自 《Linux Shell命令行及腳本編程實例詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文全面系統(tǒng)地介紹了shell腳本調(diào)試技術(shù),包括使用echo, tee, trap等命令輸出關(guān)鍵信息,跟蹤變量的值...
    liuzg0734閱讀 999評論 0 14
  • 二. 在shell腳本中輸出調(diào)試信息 通過在程序中加入調(diào)試語句把一些關(guān)鍵地方或出錯的地方的相關(guān)信息顯示出來是最常見...
    很少更新了閱讀 857評論 0 1
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,186評論 2 33
  • 第一節(jié) Shell概述 1.Shell是什么 Shell是一個命令行解釋器,它為用戶提供了一個向Linux內(nèi)核發(fā)送...
    littlexjing閱讀 2,143評論 0 1
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,588評論 9 468

友情鏈接更多精彩內(nèi)容