本文介紹
1、萬用字元的使用,用於對「檔案」的檢索
2、「[ ]」和「[[ ]]」 的其它用法(作為test命令的簡寫)
萬用字元: * ? [ ] [ ! ] [^ ]
正文:一類是匹配任意數量的字元:*
一類是匹配單個數量的字元: [ ] [ ! ] [^ ]
任意匹配:
都是加了範圍的匹配:[ ] [! ] [^ ]
①、命令:ls –l [a-c]*
必須說明一下,符號「[ ]」中間的字母順序是aabbccdd……
比如,上面的 [a-c],截斷的就是 aabbc ,沒有大寫的c
所以,表示的是:頭字元是a,a,b,b,c中間的乙個的檔案
如果是[a-c],截斷的就是 abbcc。沒有小寫的a
②、命令:ls –l musi (匹配music檔案(只是乙個例子))
只匹配最後乙個字元。當然可以匹配任意位置的字元
用來匹配單個字元,還可以用這種:ls –l ms
注意的就是「?」用來匹配單個字元
③、命令:ls –l [su]*
列出當前目錄中以s或u為首字元的所有檔案
[ ] 是用於限定搜尋單個字元的範圍
擴充套件:ls -l [a-z0-9]*
分析:[ ]用來匹配乙個字元。裡面包含的都是單個字元的備選字元,包括所有大小寫字母或數字0-9開頭的檔案。
結合第①條和第③條,你會有疑問,怎樣才能單獨匹配到小寫字母或大寫字母:點選開啟鏈結、點選開啟鏈結、點選開啟鏈結
④、命令:ls –l s* u*
中間有空格,表示列出當前目錄中以s為首字母和 以u為首字母的所有檔案
⑤、命令:ls –l s*u*
s*u*中間不加空格
匹配以s為首字母,中間有u字母的所有檔案
*可以出現在任何位置,比如:echo *.c
其實上一句沒有什麼特別的含義,「.c」也只是檔名的一部分,非字尾
並且注意和第4條的對應
⑥、命令:ls –l [ ! a-z]*
符號「!」表示取反,不取任何以字母開頭的檔案
這條命令和命令:ls –l [^a-z]* 是一樣的
!和^在這個裡面作用是一樣
注意和第1條對應
⑦、命令:ls –l 或 ls –l *
作用: 乙個是輸出檔名只有乙個字元的檔案
乙個是輸出目錄下所有的檔案
注意的點是:如果匹配不到檔案,比如當前目錄為空。則?和*會直接傳給命令作為輸入引數。
問:為什麼要注意直接傳入問題?以下面例子為例
例子:echo xx\\*\*yy
輸出:xx\**yy
分析:輸出的\是由\\輸出列印的,輸出的第二個*是由\*輸出列印的,中間的*,可能就是乙個*,因
為沒有匹配檔案,所以原樣輸出了。至於對不對,在下面有校驗:
校驗:可以使用乙個例子來檢驗一下分析是否正確
建立檔案:echo hello >tes*abcd*yy
進行檢測:echo tes\**\*yy; echo tes\\*\*yy
輸出:tes*abcd*yy (匹配了檔案)
tes\**yy (\\和\*輸出了,至於中間這個*,保持原樣)
結論:上面分析是對的
⑧、命令:echo .*
作用:匹配以」.」為起始字元的隱藏檔名,列出所有的隱藏檔案
test命令
⑴作用:用來檢測檔案屬性和狀態,比較兩檔案的區別;字串操作,字串比較;數值比較,表示式比較,最終返回出口狀態(0或1)。
⑵為什麼test命令非常適合作為控制迴圈結構的判斷命令:
方便的檔案、字元、數值間比較功能,以及出口狀態的返回值是它非常適合作為判斷條件語句的根本原因。
至於詳細操作,可以通過help test >testmanual,詳細檢視test命令的各種operators.
⑶ test命令的簡寫:[ ]或 [[ ]]
就是把test命令後面的operators,用方括號闊起來罷了。
注意:方括號內側和表示式之間必須要加空格
在shell指令碼中,需要使用[[ ]],因為有時可以避免邏輯錯誤。
「[[ ]]」 中可以使用「&&」,「||」,「」等運算子;但在「[ ]」中,使用這些運算子就會出錯。
⑷ 舉例:
功能:測試[[ ]]的功能
**:while $([[ m = m ]])
doecho hello
done
分析:[ m = m ]也是命令,所以可以用$( )進行命令替換
注意的是:while檢測的是命令的出口狀態。所以:
① while [[ m = m ]] ② while `[[ m = m ]]` ③ while $([[ m = m ]])是一樣的。
其中②是反引號。上面三種對於while檢測來說是一模一樣的。②③這兩種,甚至可以說他們寫法有點多餘。因為,完全不需要做引用或命令替換。引用或命令替換是發生在一些命令在雙引號裡面或echo命令或其它地方,命令可能不執行的情況,但又需要它執行,並引用命令的標準輸出的情況。測試語句又沒有標準輸出,只有狀態輸出,所以,用命令替換有點多餘。
shell指令碼學習之語法
一 條件測試 1 條件測試 test或 命令test可以測試乙個條件是否成立,若測試結果為真,則退出碼為0,若測試結果為假,則為1 在比較兩個字串是否相等時,建議加上雙引號,且在表示式兩邊均加上相同的乙個字母 test x data xhello 注意命令和變數的空格,重要重要重要!命令後面加空格,...
Linux學習之shell指令碼
第一行 bin bash 標記指令碼的直譯器 指令碼 bin bash echo hello world 賦予執行許可權 chmod x test.sh 執行指令碼 test.sh 定義變數時不需要 符號 td date y m d 1.變數名和符號之間不能有空格 2.首個字元必須為字母 3.中間不...
linux之shell指令碼學習
1,linux的shell種類眾多。shell常見種類如bourne shell usr bin sh或 bin sh bourne again shell bin bash c shell usr bin csh k shell usr bin ksh shell for root sbin sh...