Linux Bash命令關於程序調試詳解

轉載:http://os.51cto.com/art/201006/207230.htm程序員

參考:《Linux shell 腳本攻略》Page22-23shell

 

Linux bash程序在程序員的使用中十分重要,尤爲是和shell程序的使用中Linux bash程序的調試格外重要。在進行調試的過程當中有許多小技術點須要咱們注意。下面的門就來詳細的學習下Linux Bash命令關於程序調試詳解。編程

Linux bash程序調試的Linux Bash命令bash

在編程過程當中不免會出錯,有的時候,調試程序比編寫程序花費的時間還要多,shell程序一樣如此。
shell程序的調試主要是利用Linux Bash命令解釋程序的選擇項。調用bash的形式是:
bash -選擇項 shell程序文件名編輯器

幾個經常使用的選擇項是:
-e:若是一個命令失敗就當即退出
-n:讀入命令可是不執行它們
-u:置換時把未設置的變量看做出錯
-v:當讀入shell輸入行時把它們顯示出來
-x:執行命令時把命令和它們的參數顯示出來函數

上面的全部選項也能夠在shell程序內部用「set -選擇項」的形式引用,而「set +選擇項」則將禁止該選擇項起做用。若是隻想對程序的某一部分使用某些選擇項時,則能夠將該部分用上面兩個語句包圍起來。學習

1.未置變量退出和當即退出spa

未置變量退出特性容許用戶對全部變量進行檢查,若是引用了一個未賦值的變量就終止shell程序的執行。shell一般容許未置變量的使用,在這種狀況下,變量的值爲空。若是設置了未置變量退出選擇項,則一旦使用了未置變量就顯示錯誤信息,並終止程序的運行。未置變量退出選擇項爲「-u」。命令行

當shell運行時,若遇到不存在或不可執行的命令、重定向失敗或命令非正常結束等狀況時,若是未經從新定向,該出錯信息會打印在終端屏幕上,而shell程序仍將繼續執行。要想在錯誤發生時迫使shell程序當即結束,可使用「-e」選項將shell程序的執行當即終止。調試

2.shell程序的跟蹤

調試shell程序的主要方法是利用shell命令解釋程序的「-v」或「-x」選項來跟蹤程序的執行。「-v」選擇項使shell在執行程序的過程當中,把它讀入的每個命令行都顯示出來,而「-x」選擇項使shell在執行程序的過程當中把它執行的每個命令在行首用一個「+」加上命令名顯示出來。並把每個變量和該變量所取的值也顯示出來,所以,它們的主要區別在於:在執行命令行以前無「-v」則打印出命令行的原始內容,而有「-v」則打印出通過替換後的命令行的內容。

除了使用shell的「-v」和「-x」選擇項之外,還能夠在shell程序內部採起一些輔助調試的措施。例如,能夠在shell程序的一些關鍵地方使用echo命令把必要的信息顯示出來,它的做用至關於C語言中的printf語句,這樣就能夠知道程序運行到什麼地方及程序目前的狀態。

Linux bash程序的內部Linux Bash命令

Linux bash程序解釋程序包含了一些內部命令。內部命令在目錄列表時是看不見的,它們由shell自己提供。經常使用的內部命令有:echo、eval、exec、export、readonly、read、shift、wait和點(.)。下面簡單介紹其命令格式和功能。

1.echo
命令格式:echo arg
功能:在屏幕上打印出由arg指定的字符串。

2.eval
命令格式:eval args
功能:當shell程序執行到eval語句時,shell讀入參數args,並將它們組合成一個新的命令,而後執行。

3.exec
命令格式:exec 命令 命令參數
功能:當shell執行到exec語句時,不會去建立新的子進程,而是轉去執行指定的命令,當指定的命令執行完時,該進程,也就是最初的shell就終止了,因此shell程序中exec後面的語句將再也不被執行。

4.export
命令格式:export 變量名 或:export 變量名=變量值
功能:shell能夠用export把它的變量向下帶入子shell從而讓子進程繼承父進程中的環境變量。但子shell不能用export把它的變量向上帶入父shell。
注意:不帶任何變量名的export語句將顯示出當前全部的export變量。

5.readonly
命令格式:readonly 變量名
功能:將一個用戶定義的shell變量標識爲不可變的。不帶任何參數的readonly命令將顯示出全部只讀的shell變量。

6.read
命令格式:
read變量名錶
功能:從標準輸入設備讀入一行,分解成若干字,賦值給shell程序內部定義的變量。

7.shift語句
功能:shift語句按以下方式從新命名全部的位置參數變量:成爲,成爲……在程序中每使用一次shift語句,都使全部的位置參數依次向左移動一個位置,並使位置參數「$#」減一,直到減到0。

8.wait
功能:是shell等待在後臺啓動的全部子進程結束。Wait的返回值老是真。

9.exit
功能:退出shell程序。在exit以後可有選擇地指定一個數字做爲返回狀態。

10.「.」(點)
命令格式:. Shell程序文件名
功能:使shell讀入指定的shell程序文件並依次執行文件中的全部語句。

 


 

 

 

 


 

Linux BASH Shell set命令介紹

用set命令能夠設置各類shell選項或者列出shell變量.單個選項設置經常使用的特性.在某些選項以後-o參數將特殊特性打開.在某些選項以後使用+o參數將關閉某些特性,不帶任何參數的set命令將顯示shell的所有變量.除非遇到非法的選項,不然set老是返回ture.
當BASH shell被調用時,能夠列出所有的選項.當前的選項集列在$-中.在option參數被處理後,其餘的參數被賦值到位置參數中($1,$2,...,$n)

set [--abefhkmnptuvxldCHP] [-o option name] [arguments ...]

源碼:

選項 說明
-a 自動向已經修改的變量或爲導出後序命令的變量做出標誌
-b 不是在原提示符以前,而是當即引起終止後臺任務的狀態表表
-e 若是命令帶非零值返回,當即退出
-f 禁止帶擴展名的路徑
-h 定義函數時,定位和存儲函數命令,當函數被執行時,一般查詢函數命令
-k 全部的關鍵詞參數,而不僅是那些命令名前的關鍵詞參數,被放在環境命令中
-m 監視器模式,啓動任務控制.此選項默認支持系統shell交互.後臺進程以單獨的進程組運行,在每次完成任務時顯示包含退出的狀態行
-n 讀取命令但不執行命令.一般監查shell腳本的句法錯誤.交互shell被忽略
-o option-name 選項名能夠是下列之一:

選項 說明
allexport 同-a選項
braceexpand shell執行花括號擴展,在默認狀況下起做用
emacs 使用emacs風格命令行編輯接口.除非shell以-noline-editing選項啓動,不然當shell交互時,經過默認啓動該選項
errexit 同-e選項
histexpand 同-H選項
ignoreeof 其結果是好像shell命令IGNOREEOF=10被執行
interactive 容許單詞前帶#號,以使得在交互shell中忽略命令行的所有字符-commands
monitor 同-m選項
noclobber 同-C選項
noexec 同-n選項
noglob 同-f選項
nohash 同-d選項
notify 同-b選項
nounset 同-u選項
physical 同-p選項
posix 改變BASH屬性以匹配標準,默認操做不一樣於POSIX1003.2標準
verbose 同-v選項

vi 使用vi風格的命令行編輯器

XTRACE 同-x選項,若是沒有給出選項名,顯示當前選項值
-p 打開特權模式(在此模式,$ENV文件被處理,不能從環境中繼承

shell函數.若是是有效用戶ID而不是實用戶組則自動啓動.關閉此選項將使得有效用戶和組IDs設置實用戶和組IDs)
-t 在讀取命令並執行以後退出
-u 當執行參數括展時,把非設置變量做爲錯誤處理(若是擴展企圖出如今非設置變量中,shell顯示錯誤信息.若是不是交互式,則帶非凌值退出)
-v 輸入行被讀取時,顯示shell輸入行
-x 在每一個簡單命令被擴展以後,顯示PS4擴展值,以後是要執行的命令
-l 保存和恢復綁定在命令中的名稱
-d 禁止執行查找散列命令(一般,命令被保存在散列表中,一旦被找到就再也不繼續查找)
-C 效果好像是執行了noclobber=shell命令
-H 使用!風格的歷史替代(當shell交互時,在默認狀況下,此選項有效)
-P 若是設置此參數,當執行改變目錄命令cd時,不遵循符號連接,而是使用實際的目錄

若是在選項後沒有參數,不設置位置參數.不然,即便一些參數以a選項開始,也要把位置參數設置爲argument- 結束選項的信號,將引起其他的參數被賦值到位置參數中(-x和-v選項被關閉.若是沒有argument,位置參數將保留未改變的參數)

相關文章
相關標籤/搜索