shell指令碼的學習之萬用字元的使用

2022-09-23 14:57:13 字數 2514 閱讀 2955

本文介紹

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...