shell指令碼調試 -- 作業記錄1 本文主要描述如何輸出shell指令碼中的debug日誌. C/C++的debug日誌 在C/C++中有 __FILE__, __func__, __LINE__ 來表示 當前這行日誌來自哪個原始碼檔案的第幾行的哪個函數.如:
#include<stdio.h> /* t.c */int main() { printf("%s:%d:%s:DEBUG Hello World!\n", __FILE__, __LINE__, __func__); return 0; } /* 運行結果如下: $> make t cc t.c -o t $> ./t t.c:6:main:DEBUG Hello World! $> */
|
t.c:6:main:DEBUG Hello World! 是在說, 這行資訊來至 t.c 檔案的第 6 行的 main 函數,這種方法可以讓你在調試過程中很快的定位問題的位置. shell指令碼中的debug日誌 使用 alias 功能, 實作類別似C/C++中的debug日誌方法. 將檔案儲存到 /etc/mydebug
#!/bin/bash # mydebug # Aliases are not expanded when the shell is not interactive, unless the #+ expand_aliases shell option is set using shopt shopt -s expand_aliasescase "$1" in "debug") alias mydebug='echo -n $(caller 0|tr " " ":"):$FUNCNAME:$LINENO:LOG:" "'; ;; *) alias mydebug=''; ;; esac |
測試:
#!/bin/bash # mydebug_test.shsource /etc/mydebug debug; #如果帶參數就是 debug 模式, 不帶任何參數為非debug模式. function check_apache() { echo "$(mydebug)apache [OK]"; } function check_mysql() { echo "$(mydebug)mysql [OK]"; } function check_all() { check_apache; check_mysql; } check_all;
|
debug模式的運行結果:$> /bin/bash mydebug_test.sh
18:check_all:mydebug_test.sh:check_apache:8:LOG: apache [OK]
19:check_all:mydebug_test.sh:check_mysql:13:LOG: mysql [OK]$> 非debug模式的運行結果:$> /bin/bash mydebug_test.sh
apache [OK]
mysql [OK]
------------- end -------------
From: GS
-------------------------------