算法運算
運算符 | 說明 | 舉例 |
---|---|---|
+ | 加法 | `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 ] 返回 false。 |
-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。 |
邏輯運算符
運算符 | 說明 | 舉例 |
---|---|---|
&& | 邏輯的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 邏輯的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
文件運算符
操作符 | 說明 | 舉例 |
---|---|---|
-b file | 檢測文件是否是塊設備文件,如果是,則返回 true。 | [ -b $file ] 返回 false。 |
-c file | 檢測文件是否是字符設備文件,如果是,則返回 true。 | [ -c $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。 |
其他運算符:
- -S: 判斷某文件是否 socket。
- -L: 檢測文件是否存在並且是一個符號鏈接
printf轉義字符
序列 | 說明 |
---|---|
\a | 警告字符,通常爲ASCII的BEL字符 |
\b | 後退 |
\c | 抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效),而且,任何留在參數裏的字符、任何接下來的參數以及任何留在格式字符串中的字符,都被忽略 |
\f | 換頁(formfeed) |
\n | 換行 |
\r | 回車(Carriage return) |
\t | 水平製表符 |
\v | 垂直製表符 |
\\ | 一個字面上的反斜槓字符 |
\ddd | 表示1到3位數八進制值的字符。僅在格式字符串中有效 |
\0ddd | 表示1到3位的八進制值字符 |
字符串運算符
運算符 | 說明 | 舉例 |
---|---|---|
= | 檢測兩個字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 檢測兩個字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 檢測字符串長度是否爲0,爲0返回 true。 | [ -z $a ] 返回 false。 |
-n | 檢測字符串長度是否爲0,不爲0返回 true。 | [ -n "$a" ] 返回 true。 |
$ | 檢測字符串是否爲空,不爲空返回 true。 | [ $a ] 返回 true。 |
test命令的數值測試
參數 | 說明 |
---|---|
-eq | 等於則爲真 |
-ne | 不等於則爲真 |
-gt | 大於則爲真 |
-ge | 大於等於則爲真 |
-lt | 小於則爲真 |
-le | 小於等於則爲真 |
test命令的字符串測試
參數 | 說明 |
---|---|
= | 等於則爲真 |
!= | 不相等則爲真 |
-z 字符串 | 字符串的長度爲零則爲真 |
-n 字符串 | 字符串的長度不爲零則爲真 |
test命令的文件測試
參數 | 說明 |
---|---|
-e 文件名 | 如果文件存在則爲真 |
-r 文件名 | 如果文件存在且可讀則爲真 |
-w 文件名 | 如果文件存在且可寫則爲真 |
-x 文件名 | 如果文件存在且可執行則爲真 |
-s 文件名 | 如果文件存在且至少有一個字符則爲真 |
-d 文件名 | 如果文件存在且爲目錄則爲真 |
-f 文件名 | 如果文件存在且爲普通文件則爲真 |
-c 文件名 | 如果文件存在且爲字符型特殊文件則爲真 |
-b 文件名 | 如果文件存在且爲塊特殊文件則爲真 |
變量符號
${str:-word} |
若str存在並非空,則值爲$str; |
${str:=word} |
若str存在並非空,則值爲$str; |
${str:?word} |
若str存在並非空,則值爲$str; |
${str:+word} |
若str存在並非空,則值爲word; |
字符串的計數、截取
${#str} |
返回字符串變量str的長度 |
${str:n} |
返回${str}中從第n個字符到最後的部分 |
${str:n:len} |
返回${str}中從第n個字符開始,長度爲len的部分 |
${str#match_str} |
刪除${str}中開頭部分與match_str匹配的最小部分(從開頭匹配,刪除第一次匹配上的左邊) |
${str##match_str} |
刪除${str}中開頭部分與match_str匹配的最大部分(從開頭匹配,刪除最後一次匹配上的左邊) |
${str%match_str} |
刪除${str}中結尾部分與match_str匹配的最小部分(從結尾匹配,刪除第一次匹配上的右邊) |
${str%%match_str} |
刪除${str}中結尾部分與match_str匹配的最大部分(從結尾匹配,刪除最後一次匹配上的右邊) |
字符串替換
${str/old_str/new_str} |
用new_str替換${str}中第一次出現的old_str |
${str//old_str/new_str} |
用new_str替換${str}中所有的old_str(全局替換) |
${str/#old_str/new_str} |
用new_str替換${str}中開頭部分與old_str匹配的部分 |
${str/%old_str/new_str} |
用new_str替換${str}中結尾部分與old_str匹配的部分 |
傳遞參數
$0 ---文件名 $1 -----第一個參數以此類推
參數處理 | 說明 |
---|---|
$# | 傳遞到腳本的參數個數 |
$* | 以一個單字符串顯示所有向腳本傳遞的參數。 如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 |
$$ | 腳本運行的當前進程ID號 |
$! | 後臺運行的最後一個進程的ID號 |
$@ | 與$*相同,但是使用時加引號,並在引號中返回每個參數。 如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 |
$- | 顯示Shell使用的當前選項,與set命令功能相同。 |
$? |
顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 |
條件測試
字符串測試
文件測試
參數 |
說明 |
[ -f fname ] |
fname 存在且是普通文件時,返回真 ( 即返回 0 ) |
[ -L fname ] |
fname 存在且是鏈接文件時,返回真 |
[ -d fname ] |
fname 存在且是一個目錄時,返回真 |
[ -e fname ] |
fname(文件或目錄)存在時,返回真 |
[ -s fname ] |
fname 存在且大小大於 0 時,返回真 |
[ -r fname ] |
fname(文件或目錄)存在且可讀時,返回真 |
[ -w fname ] |
fname(文件或目錄)存在且可寫時,返回真 |
[ -x fname ] |
fname(文件或目錄)存在且可執行時,返回真 |
邏輯測試
重定向
需要注意的是文件描述符 0 通常是標準輸入(STDIN),1 是標準輸出(STDOUT),2 是標準錯誤輸出(STDERR)。
命令 | 說明 |
---|---|
command > file | 將輸出重定向到 file。 |
command < file | 將輸入重定向到 file。 |
command >> file | 將輸出以追加的方式重定向到 file。 |
n > file | 將文件描述符爲 n 的文件重定向到 file。 |
n >> file | 將文件描述符爲 n 的文件以追加的方式重定向到 file。 |
n >& m | 將輸出文件 m 和 n 合併。 |
n <& m | 將輸入文件 m 和 n 合併。 |
<< tag | 將開始標記 tag 和結束標記 tag 之間的內容作爲輸入。 |
在命令行中通過 wc -l 命令計算 Here Document 的行數;;;;
如果希望執行某個命令,但又不希望在屏幕上顯示輸出結果,那麼可以將輸出重定向到 /dev/null:
文件包含
符號.
用法
. ./test.sh