shell指令碼總結

2021-07-23 14:09:32 字數 3763 閱讀 8104

1.定義變數:

(1)變數名和等號之間不能有空格。

(2)使用乙個定義過的變數,只要在變數名前面加美元符號($)即可,

變數名外面的花括號是可選的,加不加都行,加花括號是為了幫助直譯器識別變數的邊界.

特殊變數列表

變數 含義

$0 當前指令碼的檔名

$n 傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是$1,第二個引數是$2。

$# 傳遞給指令碼或函式的引數個數。

$* 傳遞給指令碼或函式的所有引數。

$@ 傳遞給指令碼或函式的所有引數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。

$? 上個命令的退出狀態,或函式的返回值。

$$ 當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。

2.轉義字元

轉義字元 含義

\\ 反斜槓

\a 警報,響鈴

\b 退格(刪除鍵)

\f 換頁(ff),將當前位置移到下頁開頭

\n 換行

\r 回車

\t 水平製表符(tab鍵)

\v 垂直製表符

3.運算子

expr 是一款表示式計算工具,使用它能完成表示式的求值操作。

val=`expr 2 + 2`

(1)表示式和運算子之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,這與我們熟悉的大多數程式語言不一樣。

(2)完整的表示式要被 ` ` 包含,注意這個字元不是常用的單引號,在 esc 鍵下邊。

4.運算子列表

關係運算子列表

運算子 說明 舉例

-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。 [ -z $a ] 返回 true。

str 檢測字串是否為空,不為空返回 true。 [ $a ] 返回 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。

5.字串

單引號字串的限制:

單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;

單引號字串中不能出現單引號(對單引號使用轉義符後也不行)。

雙引號的優點:

雙引號裡可以有變數

雙引號裡可以出現轉義字元

6. if else fi:

expression 和方括號([ ])之間必須有空格,否則會有語法錯誤。

7. 重定向命令列表

命令 說明

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 之間的內容作為輸入。

shell指令碼總結

最近在專案中用到shell指令碼來執行命令,發現公司周圍都不會寫shell指令碼 shell是使用者和linux作業系統之間的介面。類似windows系統的dos命令列。linux中有多種shell,其中預設使用的是bash。但是如果使用到互動式輸入密碼的需要使用expect來執行,詳見 sh和ba...

shell指令碼學習總結

看完了書 shell指令碼學習指南 順便總結一下 看了整本書,全部都是命令,但也確實很難記得命令的選項,所以學習方法就變了。學習嘛,要考慮到遺忘的可能,既然會忘,還不如不去記,能做的就是但用到的時候再去學,那麼現在學習的目的就是為了縮短以後用到時再去學習的學習時間,所以現在所應該學的,是將書本上的命...

Shell指令碼學習總結

最近一段時間研究語音識別 automatic speech recognition,asr 接觸到一款優秀的asr開源專案kaldi。學習過程中,發現kaldi大部分指令碼採用shell語音編寫,所以潛心學習了一段時間的shell程式設計。總體來說,該語言難度一般,關鍵要記住眾多的命令,採用思維導圖...