萬用字符與特殊符號 shell
因爲在 bash 當中常會使用到一些萬用字符,與搭配特殊符號來將指令作更好的利用(例如最常提到的正規表示法 Regulare Express )!底下咱們列出一些經常使用的萬用字符與特殊符號: bash
符號 內容 .net
* 萬用字符,表明一個或多個字符(或數字) ip
? 萬用字符,表明一個字母 get
# 批註,這個最常被使用在 script 當中,視爲說明! test
\ 跳脫符號,將『特殊字符或萬用字符』還原成通常字符 變量
| 分隔兩個管線命令的界定; module
; 連續性命令的界定(注意!與管線命令並不相同) bug
~ 使用者的家目錄 command
$ 亦便是變量以前須要加的變量取代值
& 將指令變成背景下工做
! 邏輯運算意義上的『非』 not 的意思!
/ 路徑分隔的符號
>, >> 輸出導向,分別是『取代』與『累加』
' 單引號,不具備變量置換的功能
" 具備變量置換的功能!
` ` 兩個『 ` 』中間爲能夠先執行的指令!
( ) 在中間爲子 shell 的起始與結束
[ ] 在中間爲字符的組合
{ } 在中間爲命令區塊的組合!
組合按鍵 執行結果
Ctrl + C 終止目前的命令
Ctrl + D 輸入結束(EOF),例如郵件結束的時候;
Ctrl + M 就是 Enter 啦!
Ctrl + S 暫停屏幕的輸出
Ctrl + Q 恢復屏幕的輸出
Ctrl + U 在提示字符下,將整列命令刪除
Ctrl + Z 『暫停』目前的命令
上面的萬用字符當中,最經常使用的就屬 *, ?, [] 及 ` 了!咱們提幾個簡單的例子:
[test @test test]# ls test* <==那個 * 表明後面不論接幾個字符都予以接受(沒有字符也接受!)
[test @test test]# ls test? <==那個 ? 表明後面『必定』要接『一個』字符
[test @test test]# ls test??? <==那個 ??? 表明『必定要接三個』字符!
[test @test test]# cp test[1-5] /tmp <==將 test1, test2, test3, test4, test5 若存在的話,就拷貝到 /tmp 下
[test @test test]# cd /lib/modules/`uname -r`/kernel/drivers <==被 ` ` 括起來的內容『會先執行』!
上面幾個例子至關的有趣!尤爲是最後面兩個!須要注意的是, [] 裏面『表明只有一個字符』可是範圍能夠由 1-5 ,這樣來講的話,那麼咱們若是容許『只要檔名裏面含有至少一個大寫字符』時,就能夠將檔案 copy 出來的話,能夠這樣作:
cp *[A-Z]* /tmp
頗有趣吧?! ^_^
此外,那個 `` 裏面的『指令』會先被執行,也就是說:
系統先執行 uname -r 找出輸出的結果;
將結果累加在目錄上面,來執行 cd 的功能!
很棒吧!!這些基本的功能須要特別來了解一下才行呦!
--------------------------------------------------------------------------------
連續指令的下達方式:
這裏須要再提幾個重要的信息,咱們剛剛上面提過說,兩個指令前後寫在一塊兒,能夠這樣寫:
command1; command2
利用分號『 ; 』來分隔,這個分號的意思,表明不論 command1 執行結果爲什麼,command2 都會被執行!那麼若是我是兩個相關的指令,第一個 command1 若是執行結果有錯誤,第二個就不被執行,能夠這樣作嗎?固然能夠,就使用下面兩個連結的咚咚:
command1 && command2
command1 || command2
還記得咱們以前的變量內容中,那個 ? 表明什麼嗎?沒錯,就是表明前一個執行的指令內容有沒有錯誤,若是有錯誤就回傳爲 1 ,沒有錯誤就回傳爲 0 ,你能夠經由 echo $? 來查詢得知!那麼 && 就是表明,當 command1 執行結果傳回值爲 0 的時候,也就是沒有錯誤訊息時,則 command2 纔會開始執行,而 || 偏偏相反,當 command1 有錯誤訊息時, command2 纔會執行!舉個例子來講,個人系統中並無 /vbird 這個目錄,因此執行 ls /vbird 應該會有錯誤訊息纔對,因此,底下三個指令串會顯示什麼呢?
[root @test root]# ls /vbird ; ls /
[root @test root]# ls /vbird && ls /
[root @test root]# ls /vbird || ls /
試看看呦!