shell指令碼除錯中開啟set選項

2021-07-03 13:48:30 字數 2399 閱讀 7944

設定除錯選項概覽

短符號長符號結果

set -f

set -o noglob

禁止特殊字元用於檔名擴充套件。

set -v

set -o verbose

列印讀入shell的輸入行。

set -x

set -o xtrace

執行命令之前列印命令。

我們在除錯shell指令碼的時候,不可以避免的會遇到問題,這個時候,假如我們可以跟蹤到指令碼到底是**問了問題,是哪個變數出了問題,這樣就對我們的除錯是很有幫助的,這裡介紹乙個shell裡面的跟蹤選項這裡介紹的是set命令,假設在指令碼裡面加入set –x ,就能顯示指令碼執行是的冗餘輸出,如果在指令碼檔案中加入了命令set –x ,那麼在set命令之後執行的每一條命令以及載入命令列中的任何引數都會顯示出來,每一行都會加上加號(+),提示它是跟蹤輸出的標識,在子shell中執行的shell跟蹤命令會加2個叫號(++)。

下面來看看演示指令碼:

1:  [root@centos6 shell]# cat set-x.sh
2:  #!/bin/bash
3:  #set -x
4:  echo -n "can you write device drivers?"
5:  read answer
6:  answer=$(echo $answer | tr [a-z] [a-z])
7:  

if [ $answer = y ]

8:  then
9:          echo "wow,you must be very skilled"
10:  

else

11:          echo "neither can i,i am just an example shell script"
12:  fi
13:  [root@centos6 shell]# sh set-x.sh
14:  can you write device drivers?y
15:  wow,you must be very skilled
16:  [root@centos6 shell]# sh set-x.sh
17:  can you write device drivers?n
18:  neither can i,i am just an example shell script
19:  [root@centos6 shell]#

上面的指令碼內容裡面,我吧set –x  這一行注釋掉了,我們平時都是看到這種效果,下面我將把set –x 這個選項開啟,來看看效果:

1:  [root@centos6 shell]# sh set-x.sh
2:  + echo -n 'can you write device drivers?'
3:  can you write device drivers?+ read answer
4:  y
5:  ++ echo y
6:  ++ tr '[a-z]'

'[a-z]'

7:  + answer=y
8:  + '[' y = y ']'
9:  + echo 'wow,you must be very skilled'
10:  wow,you must be very skilled
11:  [root@centos6 shell]# sh set-x.sh
12:  + echo -n 'can you write device drivers?'
13:  can you write device drivers?+ read answer
14:  n
15:  ++ echo n
16:  ++ tr '[a-z]'

'[a-z]'

17:  + answer=n
18:  + '[' n = y ']'
19:  + echo 'neither can i,i am just an example shell script'
20:  neither can i,i am just an example shell script
21:  [root@centos6 shell]#

嘿嘿,看到了吧,每一行都顯示出來,每乙個引數的狀態和執行到哪一步的值是多少,都可以看的很清楚了吧,我們可以很清楚的看到answer這個變數的每一步的狀態和值,如果感興趣,來試驗下吧,這個選項

linux中除錯shell指令碼

原來的指令碼check.sh monfile var log test testmon.txt logfile var log test testmon.log touch monfile 該指令碼是在window裡編輯的,編輯後上傳到linux的 問題 執行後,目錄下出現的檔案是testmon.t...

Shell 指令碼除錯

除錯功能是每一門程式語言都應該實現的重要特性,每個系統程式設計師都應該了解bash的除錯選項 1.使用選項 x,啟動shell指令碼的跟蹤除錯功能,將執行的每一條命令和輸出的結果輸出 test.sh檔案 bin bash foriin do echo i done echo script execu...

除錯shell指令碼

遇見莫名其妙的錯誤,先dos2uinux指令碼。echo命令是最有用的除錯指令碼工具之一。一般在可能出現問題的指令碼前後加入echo命令 使用bash命令引數進行除錯 引數 n 不會執行該指令碼,僅查詢指令碼語法是否有問題,並給出錯誤提示。v 在執行指令碼時,先將指令碼的內容輸出到螢幕上然後執行指令...