關於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等對應於函數調用語句中的實參。