天天看點

如何在Linux中啟用Shell腳本的調試模式

如何在Linux中啟用Shell腳本的調試模式

腳本是存儲在一個檔案的一系列指令。在終端上輸入一個個指令,按順序執行的方法太弱了,使用腳本,系統中的使用者可以在一個檔案中存儲所有指令,反複調用該檔案多次重新執行指令。

在學習腳本或寫腳本的初期階段,我們通常從寫小腳本或者幾行指令的短腳本開始,調試這樣的腳本時我們通常無非就是通過觀察它們的輸出來確定其正常工作。

然而,當我們開始寫非常長或上千行指令的進階腳本,例如改變系統設定的腳本,在網絡上執行關鍵備份 等等,我們會意識到僅僅看腳本輸出是不足以在腳本中找到 bug 的!

是以,在 linux 系列中這篇介紹 shell 腳本調試, 我們将看看如何啟用 shell 腳本調試,然後在之後的系列中解釋不同的 shell 腳本調試模式以及如何使用它們。

如何開始寫一個腳本

一個腳本與其它檔案的差別是它的首行,它包含 #! (she-bang - 釋伴:定義檔案類型)和路徑名(解釋器路徑),通知系統該檔案是一個指令集合,将被指定程式(解釋器)解釋。

下面是不同類型腳本 首行 示例:

#!/bin/sh          [sh 腳本] 

#!/bin/bash        [bash 腳本]  

#!/usr/bin/perl    [perl 程式] 

#!/bin/awk -f      [awk 腳本]    

注意:如果腳本僅包含一組标準系統指令,沒有任何内部 shell 指令,首行或 #! 可以去掉。

如何在 linux 作業系統執行 shell 腳本

調用一個腳本腳本的正常文法是:

$ 腳本名 參數1 ... 參數n 

另一種可能的形式是明确指定将執行這個腳本的 shell,如下:

$ shell 腳本名 參數1 ... 參數n 

示例:

$ /bin/bash   參數1 ... 參數n     [bash 腳本] 

$ /bin/ksh   參數1 ... 參數n      [ksh 腳本] 

$ /bin/sh   參數1 ... 參數n       [sh 腳本] 

對于沒有 #! 作為首行,僅包含基礎系統指令的腳本,示例如下:

### 腳本僅包含标準系統指令 

cd /home/$user 

mkdir tmp 

echo "tmp directory created under /home/$user" 

使它可執行并運作,如下:

$ chmod +x  腳本名 

$ ./腳本名  

啟用 shell 腳本調試模式的方法

下面是主要的 shell 腳本調試選項:

-v (verbose 的簡稱) - 告訴 shell 讀取腳本時顯示所有行,激活詳細模式。

-n (noexec 或 no ecxecution 簡稱) - 訓示 shell 讀取所有指令然而不執行它們,這個選項激活文法檢查模式。

-x (xtrace 或 execution trace 簡稱) - 告訴 shell 在終端顯示所有執行的指令和它們的參數。 這個選項是啟用 shell 跟蹤模式。

1、 改變 shell 腳本首行

第一個機制是改變 shell 腳本首行,如下,這會啟動腳本調試。

#!/bin/sh 選項 

其中, 選項可以是上面提到的一個或多個調試選項。

2、 調用 shell 調試選項

第二個是使用如下調試選項啟動 shell,這個方法也會打開整個腳本調試。

$ shell 選項 參數1 ... 參數n 

$ /bin/bash 選項 參數1 ... 參數n 

3、 使用 shell 内置指令 set

第三個方法是使用内置指令 set 去調試一個給定的 shell 腳本部分,如一個函數。這個機制是重要的,因為它讓我們可以去調試任何一段 shell 腳本。

我們可以如下使用 set 指令打開調試模式,其中選項是之前提到的所有調試選項。

$ set 選項 

啟用調試模式:

$ set -選項 

禁用調試模式:

$ set +選項 

此外,如果我們在 shell 腳本不同部分啟用了幾個調試模式,我們可以一次禁用所有調試模式,如下:

$ set - 

關于啟用 shell 腳本調試模式,先講這些。正如我們看到的,我們可以調試一整個 shell 腳本或者特定部分腳本。

在此系列下面的兩篇文章中,我們會舉例介紹如何使用 shell 腳本調試選項,進一步了解 詳細verbose、文法檢查syntax checking、 跟蹤tracing調試模式。

更重要的是,關于這個指南,歡迎通過下面評論提出任何問題或回報。

作者:aaron kili

來源:51cto

繼續閱讀