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程式設計。總體來說,該語言難度一般,關鍵要記住眾多的命令,採用思維導圖...