變數
含義$0
當前指令碼的檔名
$n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是$1,第二個引數是$2。
$#傳遞給指令碼或函式的引數個數。
$*傳遞給指令碼或函式的所有引數。
$@傳遞給指令碼或函式的所有引數。被雙引號(」 「)包含時,與 $* 稍有不同,下面將會講到。
$?上個命令的退出狀態,或函式的返回值。
$$當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。 ∗
和 @ 都表示傳遞給函式或指令碼的所有引數,不被雙引號(」 「)包含時,都以」1""
2」 … 「$n」 的形式輸出所有引數。
但是當它們被雙引號(」 「)包含時,」∗"
會將所有
的引數作
為乙個整
體,以"
1 2…
n」的形式輸出所有引數;」@"
會將各個
引數分開
,以" 1」 「2"
…"n」 的形式輸出所有引數。
$? 可以獲取上乙個命令的退出狀態。所謂退出狀態,就是上乙個命令執行後的返回結果。
退出狀態是乙個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。
命令替換是指shell可以先執行命令,將輸出結果暫時儲存,在適當的地方輸出。
命令替換的語法:
`command`
注意是反引號,不是單引號,這個鍵位於 esc 鍵下方。
變數替換可以根據變數的狀態(是否為空、是否定義等)來改變它的值
可以使用的變數替換形式:
形式說明
$變數本來的值
$如果變數 var 為空或已被刪除(unset),那麼返回 word,但不改變 var 的值。
$如果變數 var 為空或已被刪除(unset),那麼返回 word,並將 var 的值設定為 word。
$如果變數 var 為空或已被刪除(unset),那麼將訊息 message 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。若此替換出現在shell指令碼中,那麼指令碼將停止執行。
$如果變數 var 被定義,那麼返回 word,但不改變 var 的值。
運算子說明舉例
+ 加法
expr $a + $b
結果為 30。
- 減法
expr $a - $b
結果為 10。
* 乘法
expr $a \* $b
結果為 200。
/ 除法
expr $b / $a
結果為 2。
% 取餘
expr $b % $a
結果為 0。
= 賦值
a=$b 將把變數 b 的值賦給 a。
== 相等
用於比較兩個數字,相同則返回 true。 [ a==
b ] 返回 false。
!= 不相等
用於比較兩個數字,不相同則返回 true。 [ a!
= b ] 返回 true。
乘號(*)前邊必須加反斜槓()才能實現乘法運算;
運算子說明
舉例-eq
檢測兩個數是否相等,相等返回 true。
[ $a -eq $b ] 返回 true。
-ne檢測兩個數是否相等,不相等返回 true。
[ $a -ne $b ] 返回 true。
-gt檢測左邊的數是否大於右邊的,如果是,則返回 true。
[ $a -gt $b ] 返回 false。
-lt檢測左邊的數是否小於右邊的,如果是,則返回 true。
[ $a -lt $b ] 返回 true。
-ge檢測左邊的數是否大等於右邊的,如果是,則返回 true。
[ $a -ge $b ] 返回 false。
-le檢測左邊的數是否小於等於右邊的,如果是,則返回 true。
[ $a -le $b ] 返回 true。
運算子說明舉例
!非運算,表示式為 true 則返回 false,否則返回 true。
[ ! false ] 返回 true。
-o或運算,有乙個表示式為 true 則返回 true。
[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a與運算,兩個表示式都為 true 才返回 true。
[ $a -lt 20 -a $b -gt 100 ] 返回 false。
運算子說明舉例
=檢測兩個字串是否相等,相等返回 true。
[ $a = $b ] 返回 false。
!=檢測兩個字串是否相等,不相等返回 true。
[ $a != $b ] 返回 true。
-z檢測字串長度是否為0,為0返回 true。
[ -z $a ] 返回 false。
-n檢測字串長度是否為0,不為0返回 true。
[ -n $a ] 返回 true。
str檢測字串是否為空,不為空返回 true。
[ $a ] 返回 true。
操作符說明舉例
-b file
檢測檔案是否是塊裝置檔案,如果是,則返回 true。
[ -b $file ] 返回 false。
-c file
檢測檔案是否是字元裝置檔案,如果是,則返回 true。
[ -b $file ] 返回 false。
-d file
檢測檔案是否是目錄,如果是,則返回 true。
[ -d $file ] 返回 false。
-f file
檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。
[ -f $file ] 返回 true。
-g file
檢測檔案是否設定了 sgid 位,如果是,則返回 true。
[ -g $file ] 返回 false。
-k file
檢測檔案是否設定了粘著位(sticky bit),如果是,則返回 true。
[ -k $file ] 返回 false。
-p file
檢測檔案是否是具名管道,如果是,則返回 true。
[ -p $file ] 返回 false。
-u file
檢測檔案是否設定了 suid 位,如果是,則返回 true。
[ -u $file ] 返回 false。
-r file
檢測檔案是否可讀,如果是,則返回 true。
[ -r $file ] 返回 true。
-w file
檢測檔案是否可寫,如果是,則返回 true。
[ -w $file ] 返回 true。
-x file
檢測檔案是否可執行,如果是,則返回 true。
[ -x $file ] 返回 true。
-s file
檢測檔案是否為空(檔案大小是否大於0),不為空返回 true。
[ -s $file ] 返回 true。
-e file
檢測檔案(包括目錄)是否存在,如果是,則返回 true。
[ -e $file ] 返回 true。
shell程式設計筆記(二)
終於要開始正式寫shell指令碼了 建立陣列變數的方式,直接給陣列的索引賦值 array index value注意 index是有取值範圍的 0,1023 如果乙個標量的名字和陣列名重名,那麼該標量對應的值就會變成該陣列0索引對應的值 另一種初始化陣列的方式,可以給多個元素一次性賦值 訪問方式也在...
shell程式設計筆記(二)
這兩個屬於附加許可權位,這兩個附加許可權通過設定使用者id位 suid 和設定組id位 sgid 的機制來賦給程式 當你執行了乙個設定了suid位的程式時,你就繼承了該程式的屬主的許可權,當你執行了乙個設定了sgid位的程式,你就繼承了該程式所屬使用者組的許可權 可以看到passwd程式的suid位...
shell程式設計學習筆記
c語言中文網 shell教程 學習這篇文章時,發現它在單引號和雙引號有什麼區別上寫的不夠準確,於是網上查詢資料 shell程式設計中單引號,雙引號,各種括號的區別 學習這篇部落格時,發現寫的還是不夠準確,繼續網上查詢資料 雙引號作用與單引號類似,區別在於它沒有那麼嚴格。單引號告訴shell忽略所有特...