shell除錯選項

2021-07-04 06:07:24 字數 1018 閱讀 4867

【shell除錯選項】

一些常用選項的用法:

-n 只讀取shell指令碼,但不實際執行

-x 進入跟蹤方式,顯示所執行的每一條命令

-c "string" 從strings中讀取命令

「-n」可用於測試shell指令碼是否存在語法錯誤,但不會實際執行命令。在shell指令碼編寫完成之後,實際執行之前,首先使用「-n」選項來測試指令碼是否存在語法錯誤是乙個很好的習慣。因為某些shell指令碼在執行時會對系統環境產生影響,比如生成或移動檔案等,如果在實際執行才發現語法錯誤,您不得不手工做一些系統環境的恢復工作才能繼續測試這個指令碼。

「-c」選項使shell直譯器從乙個字串中而不是從乙個檔案中讀取並執行shell命令。當需要臨時測試一小段指令碼的執行結果時,可以使用這個選項,如下所示:

sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"'

"-x"選項可用來跟蹤指令碼的執行,是除錯shell指令碼的強有力工具。「-x」選項使shell在執行指令碼的過程中把它實際執行的每乙個命令列顯示出來(用於跟蹤邏輯),並且在行首顯示乙個"+"號。 "+"號後面顯示的是經過了變數替換之後的命令列的內容,有助於分析實際執行的是什麼命令。 「-x」選項使用起來簡單方便,可以輕鬆對付大多數的shell除錯任務,應把其當作首選的除錯手段。

shell的執行選項除了可以在啟動shell時指定外,亦可在指令碼中用set命令來指定。 "set -引數"表示啟用某選項,"set +引數"表示關閉某選項。有時候我們並不需要在啟動時用"-x"選項來跟蹤所有的命令列,這時我們可以在指令碼中使用set命令,如以下指令碼片段所示:

$lineno

代表shell指令碼的當前行號,類似於c語言中的內建巨集__line__

$funcname

函式的名字,類似於c語言中的內建巨集__func__,但巨集__func__只能代表當前所在的函式名,而$funcname的功能更強大,它是乙個陣列變數,其中包含了整個呼叫鏈上所有的函式的名字,故變數$代表shell指令碼當前正在執行的函式的名字,而變數$則代表呼叫函式$的函式的名字,餘者可以依此類推。

參考:

Makefile中加入gdb除錯選項

makefile檔案示例 target hello.o example.o main target cc c main target tab縮排開頭 main.o your.h clean.o your.h phony clean clean rm target tab縮排開頭,以下同理 加入 g在...

shell程式設計常用的檔案測試選項

返回true 如果.e 檔案存在 a 檔案存在 這個選項的效果與 e 相同.但是它已經被棄用了,並且不鼓勵使用 f file 是乙個regular 檔案 不是目錄或者裝置檔案 s 檔案長度不為0 d 檔案是個目錄 b 檔案是個塊裝置 軟盤,cdrom 等等 c 檔案是個字元裝置 鍵盤,modem,音...

新增除錯選項編譯出現錯誤

sky sky lenovo ideapad y470 work gcc o ggdb3 statistic statistic.c statistic 在函式 fini 中 fini 0x0 fini 被多次定義 usr bin ld usr lib debug usr lib x86 64 li...