2021-05-12 14:32:11
Shell 指令碼中的檔名匹配和命令執行
理解下 shell 指令碼中的檔名匹配和命令執行的順序與結果。我們學習這個的目的是可以熟悉的在 shell 指令碼中寫出快速的找到檔案的命令。它可以匹配檔名中的任何字串,匹配檔名中的單個字元以及匹配檔名中的字母或數位符號。
首先我們來看看匹配檔案的符號的定義,匹配字串型別的符號稱之為元字元。匹配檔名中的任意字串,同時也包括空字串。
舉例:ls /etc/*.conf ls /etc/h*.co*f。結果如下
我們看到成功的匹配到了 /etc 目錄下的 h 開頭的 con*f 結尾的所有檔案,那麼我們以後在檔案的查詢中就很方便了。
下來我們來看看?匹配檔案,那麼它是能匹配檔名中的任何單個字元。
舉例:ls /etc/hos?.conf ls /etc/??g.conf。結果如下所示
下來繼續來看看 [ ] 匹配檔案,[ ... ] 匹配 [ ] 中所包含的任意一個字元。有兩種匹配方式:a> 雜亂匹配:ls /etc/[wsdcr]syslog.conf;b> 範圍匹配:ls [0-9][a-zA-Z].txt
我們看到已經匹配出來了。[ !... ] 匹配 [ ] 中非感嘆號!之後的任意一個字元,它與上一條規則剛好相反。舉例:ls [!0-9]*.txt。此條是匹配非數位開頭的字尾名為 txt 的所有檔案。如下
下來我們來看看一個綜合應用:查詢一個以數位開頭,接著包括兩個小寫英文字母,然後再接任意兩個字元的以 .conf 結尾的檔名。(如:5abcui.conf 是符合條件的)
#! /bin/bash
ls [0-9][a-z][a-z]???.conf
我們來看看結果
我們在平時的輸出 log 中通常會以特定字元+年月日來進行儲存,那麼我們的建立 log 的方式就如下
如果我們能熟練的使用匹配字元,那麼便可以大大減少在查詢檔名上的工作量,這是一種非常有效的模式匹配方法。
下來我們接著看看命令執行的順序和結果。我們知道在一般的命令中,它是有返回執行結果的,成功則返回 1,失敗返回 0;同樣的,在Linux中,也是有命令的返回結果的,只不過是它比較特殊,成功時返回 0,失敗時返回非 0。下來我們看看範例,如下
我們看到在 ls abcs.log 時,由於沒有這個檔案,因此它的返回值為 2(非 0);在 ls 2.txt 時,這個檔案是存在的,因此它的返回值為 0。
下來我們來看看命令的執行控制:a> 使用 && 符號;b> 使用 || 符號;c> 命令的組合使用“;”。
a> 使用 && 符號
格式:命令 1 && 命令 2 && ··· ;說明:如果命令 1 執行成功,那麼執行命令 2 ···
舉例:cp /etc/sysctl.conf /mnt/ && echo "Copy file success"
我們看到在有檔案存在的情況下,便執行後面的 echo 命令,列印出了 Copy file success。在前面的命令沒有執行成功的情況下,沒有繼續執行後面的 echo 命令。我們在編譯原始碼時:./configure && make && make install ,它的用處是用於指令碼的執行的偵錯。
b> 使用 || 符號
相關文章