shell程序設計注意事項

 關於Linux 中的 shell

在linux系統中使用的主流shell是Bash,它是Bourne Again Shell 的縮寫,Bash是由Bourne Shell發展而來的,但Bash與sh稍有不同,它還包含了csh和ksh的特色,但大多數腳本都可以不加修改地在Bash上運行。

 1、shell腳本的執行

我們用vim創建好一個shell程序後,是不能直接運行的,我們首先需要修改它的權限,利用chmod a+x filename 即可把文件修改爲可執行文件。當然我們也可以以腳本作爲shell參數的執行方式來執行, 可利用命令 sh  filename ,另外一種方式就是利用輸入重定向的方式執行, sh < filename .

 2、位置參數 

在shell中規定,位置參數最多不能超過9個,即$1~$9. 如果實際給定的命令行參數多於9個,就需要用shift命令移動位置參數。每執行一次shift命令,就把位置參數整體向左移一位,即原來的$1的值被移走,新的$1的值就是原來$2的值....當然shift不能將$0移走。也可以一次左移多位,shift n 就可實現一次左移n位。

 3、shell中的引號

雙引號("")由它括起來的字符,除$ 、倒引號和反斜線(\)保留其特殊功能外,其餘字符通常作爲普通字符對待。還要特別注意的是引號一定是英文雙引號,而不能是中文狀態下的引號。

由單引號括起來的所有字符和字符串都作爲普通字符出現,顯示的時候都照原樣顯示,特殊字符也失去了原有的特殊意義。

倒引號括起來的字符串被shell解釋爲命令行,shell會執行該命令,並以它的標準輸出結果取代整個倒引號部分。

 4、if 語句

if then else case  在使用時一定要與後面的判斷條件,命令等留一個空格,否則就會出錯。比如:

錯誤:if[ "$1" -lt 10 ]   

正確:if [ "$1" -lt 10 ]

if語句最後要以fi結束,case語句最後要以esac結束。

 5、測試語句

test -f "$1"  等效於 [ -f "$1" ]

在使用時要注意以下三點:

如果在test語句中使用shell變量,爲表示完整,避免造成歧義,最好用雙引號將變量括起來。

在任何一個運算符、圓括號、方括號等操作符的前後至少需要留有一個空格。

如果需要在下一行繼續測試表達式,應該在按下Enter鍵之前加上反斜線(\).

 6、case語句

case string1 in

strn)

commands ;;

esac

其中strn也稱爲正則表達式。

使用時應該注意以下三點:

每個正則表達式後面可有一條或多條命令,其最後一條命令必須以兩個分號(;;)結束。

正則表達式中可以使用通配符。

如果一個正則表達式是由多個模式組成,那各個模式之間應該以豎線"|"隔開。這樣就可以表示各個模式是“或”的關係。也就是說只要給定的字符串與其中一個模式相匹配,就會執行其後面的命令表。

 7、算術表達式

正確:expr 14 - 3

錯誤:expr14-3  ;expr 14-3 ;expr 14 -3

在運算符的前後都要留有空格,否則expr不對表達式進行計算,而直接輸出他們,表示”乘“的運算符前應該加一個轉義符"\*",並非只是一個"*".

 8、自定義函數

函數定義後,在文件中調用此函數時,直接利用函數名,如test ,不必帶圓括號,就好像使用一般普通命令一樣。shell腳本與函數間的參數傳遞可利用位置參數和變量直接傳遞,變量的值可以由shell腳本傳遞給被調用的函數,而函數中所用的位置參數$1、$2等對應於函數調用語句中的實參。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章