前提:shell環境pdksh和bash; Ubuntu下預設的shell環境是bash
文法篇:
<一>變數
1.變數分為三種類型:環境變數、內部變數和使用者變數;其中環境變數和內部變數不需要使用者定義,可以直接使用。
環境變數:由系統定義,使用者不需要定義但可以改變變數的值。
內部變數:由系統提供的一種特殊類型的變數。這種變數在程式中用來做出判定。在shell程式內這些變數是不能夠修改的。
部分內部變數如下:
$# 傳遞給shell程式的位置參數的數目;
$? 最後命令完成碼或shell程式內所執行的shell程式;
$0 shell程式的名稱;
$* 調用shell程式是所傳送的變元的單字串。
使用者變數:由使用者定義的,能夠被使用者所修改。
注意:1. 變數是無類型的(若類型的);
2. 不需要聲明
3. 賦值 例子 a=10; “=”兩邊不可以有空格
字串賦值有三種,分別是:“=”後直接跟字串;字串加單引號;字串加雙引號。但是有所區別
1. 當字串中有空格出現時,不能採用第一種,必須用第二種或第三種;
2. 加‘’可以阻止shell解析變數
3. 加“”可以解析字串中的所有變數
例如:x=abc def會產生錯誤,正確形式 x='abc def' 或 x="abc def"
雙引號
var="test string"
newvar="Value of var is $var"
echo $newvar
輸出結果為: Value of var is test string
單引號
var="test string"
newvar='Value of var is $var'
echo $newvar
輸出結果為:Value of var is $var
反斜線
在某個字元前利用反斜線可以阻止shell把後面的字元解釋為特殊字元。
test=3
var=$test
echo $var
輸出結果是:3
test=3
var=/$test
echo $var
輸出結果是:test
<二>運算式的比較
在不同的shell中執行邏輯比較的操作符是不同的,在pdksh和bash下,有一個叫做 test 的命令可以用來完成運算式的比較。test命令支援如下四種類型的比較
1. 字串比較
= 比較兩個字元是否相等
!= 比較兩個字串是否不相等
-n 比較字串長度是否大於零
-z 比較字串長隊是否等於零
2. 數字比較
-eq 比較兩個數字是否相等
-ge 比較第一個數是否大於等於第二個數
-le 比較第一個數是否小於等於第二個數
-ne 比較兩個數是否不等
-gt 比較第一個數是否大於第二個數
-lt 比較第一個數是否小於第二個數
3. 檔案操作比較
-d 判斷檔案是否是目錄
-f 判斷檔案是否是普通檔案
-r 判斷是否對檔案設定了讀許可權
-s 判斷檔案名稱長隊是否大於0
-w 判斷檔案是否有寫入權限
-x 判斷檔案是否有執行許可權
4. 邏輯操作符比較
! 邏輯非
-o 邏輯或
-a 邏輯與