Shell編程之常見符號整理

算法運算

運算符 說明 舉例
+ 加法 `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:=word}

str存在並非空,則值爲$str
str未定義或爲空值,則值爲word,str被賦值word

${str:?word}

str存在並非空,則值爲$str
str未定義或爲空值,則值爲word,並終止腳本

${str:+word}

str存在並非空,則值爲word
否則返回空值
,str的值不變

 

字符串的計數、截取

 

${#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

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