Linux shell指令碼錯誤檢測

2021-10-01 23:19:00 字數 2297 閱讀 9480

除了 echo 命令,還可以使用如下兩種方法。

1.shell跟蹤選項

set命令執行之後的每一條命令以及加在命令列中的任何引數(包括變數和變數的值)都會顯示出來。"+"是跟蹤輸出的標誌,在子shell中執行的shell命令會加兩個"+"。

【例】

#!/bin/sh

#set -x

echo -n "can you write device drivers?"

read answer

answer=`echo $answer | tr [a-z] [a-z]`

if [ "$answer" = "y" ]

then

echo "wow, you must be very skilled"

else

echo "neither can i, i'm just an example shell script"

fi

說明:

1.read命令參考 

2.echo $answer | tr [a-z] [a-z]  將變數answer中的小寫字母全部轉換成大寫字母 

3.注意判斷式 if [ "$answer" = "y" ] 的比較操作符兩邊都要有空格

執行該檔案時,示例結果如下

$ ./example

can you write device drivers? y

wow, you must be very skilled

或者$ ./example

can you write device drivers? n

neither can i, im just an example shell script

如果"set -x"那一行沒有注釋掉,則執行結果如下所示:

$ ./example

+ echo -n 'can you write device drivers?'

can you write device drivers?+ read answer

y++ echo y

++ tr '[a-z]' '[a-z]'

+ answer=y

+ '[' y = y ']'

+ echo 'wow, you must be very skilled'

wow, you must be very skilled

或如下所示:

+ echo -n 'can you write device drivers?'

can you write device drivers?+ read answer

n++ echo n

++ tr '[a-z]' '[a-z]'

+ answer=n

+ '[' n = y ']'

+ echo 'neither can i, i'\''m just an example shell script'

neither can i, i'm just an example shell script

2.根據除錯層次控制輸出

在指令碼的開始部分設定乙個除錯變數。指令碼執行時測試該變數,然後根據變數的值決定是顯示還是禁止除錯指令。

# !/bin/sh

debug=1

test $debug -gt 0 && echo "debug is on"

echo -n "can you write device drivers?"

read answer

test $debug -gt 0 && echo "the answer is $answer"

answer=`echo $answer | tr [a-z] [a-z]`

if [ "$answer" = "y" ]

then

echo "wow, you must be very skilled"

test $debug -gt 0 && echo "the answer is $answer"

else

echo "neither can i, i'm just an example shell script"

test $debug -gt 0 && echo "the answer is $answer"

fi

說明:

test $debug -gt 0 && echo some_debug_output  只有test結果為真,測試條件邏輯與才會執行其它**

test $debug -gt 0 || echo some_debug_output  只有test結果為假,測試條件邏輯或才會執行其它**

LINUX SHELL 抓取錯誤日誌指令碼

任何程式執行起來免不了產生很多日誌,其中錯誤日誌需要最為關心的。在某些時候會將錯誤日誌和正常日誌分開,但我們的系統卻沒有這麼做。更麻煩的是,每個小時儲存乙個日誌檔案,所以每次為了查詢當天是否有錯誤資訊需要開啟n個檔案,而且不能用grep因為需要把整個堆疊抓取下來。本人對shell完全是初學,磕磕碰碰...

LINUXSHELL抓取錯誤日誌指令碼

任何程式執行起來免不了產生很多日誌,其中錯誤日誌需要最為關心的。在某些時候會將錯誤日誌和正常日誌分開,但我們的系統卻沒有這麼做。更麻煩的是,每個小時儲存乙個日誌檔案,所以每次為了查詢當天是否有錯誤資訊需要開啟n個檔案,而且不能用grep因為需要把整個堆疊抓取下來。本人對shell完全是初學,磕磕碰碰...

LINUXSHELL抓取錯誤日誌指令碼

任何程式執行起來免不了產生很多日誌,其中錯誤日誌需要最為關心的。在某些時候會將錯誤日誌和正常日誌分開,但我們的系統卻沒有這麼做。更麻煩的是,每個小時儲存乙個日誌檔案,所以每次為了查詢當天是否有錯誤資訊需要開啟n個檔案,而且不能用grep因為需要把整個堆疊抓取下來。本人對shell完全是初學,磕磕碰碰...