命令列擴充套件及檔案萬用字元
阿新 • • 發佈:2018-12-17
一、命令列擴充套件:$()或` `
echo "This system's name is $(hostname)"
echo echo "This system's name is `hostname`"
以上兩句輸出效果相同
"" 或 '' 或` `之間的區別:
'' 強引用 不完成變數替換
"" 弱引用 可以實現變數替換
`` 命令執行
二、{}
echo file{1,2,3}
file1 file2 file3
echo file{1,2,3}{a,b}
file1a file1b file2a file2b file3a file3b
echo file{1.. 9}
file1 file2 file3 file4 file5 file6 file7 file8 file9
echo file{1..20..2}
file1 file3 file5 file7 file9 file11 file13 file15 file17 file19
echo file{a..Z}
filea file` file_ file^ file] file file[ fileZ
其顯示順序是按照ASCII字元程式碼表順序顯現
三、命令列歷史
- 歷史命令記錄於主目錄下的 .bash_history檔案中
- 系統會自動儲存我們輸入的命令,history查詢歷史命令。
- 登入進shell後新執行的命令只會記錄於快取中,這些命令會在使用者退出時追加儲存至“.bash_history”這個資料夾中。
- 一些快捷命令:
!! 重複上一個命令 !n 執行history命令輸出的第n條命令 !-n 執行history命令輸出倒數的第n條命令 !string 重複前一個以“string”開頭的命令 !?string 重複前一個包含string的命令 ! (上一條命令的最後一個引數)的內容 !:p列印輸出!(上一條命令的所有引數)的內容 ** ctrl-r來在命令歷史中搜索命令** command !^ : 利用上一個命令的第一個引數做cmd的引數 command !$ : 利用上一個命令的最後一個引數做cmd的引數 command !* : 利用上一個命令的全部引數做cmd的引數 command !:n : 利用上一個命令的第n個引數做cmd的引數
四、檔案萬用字元
符號 | 內容 |
---|---|
* | 匹配零個或多個字元 |
? | 匹配任何單個字元 |
[0-9] | 匹配數字範圍 |
[a-z] | 字母 a到z |
[A-Z] | 字母A到Z |
[wang] | 匹配wang中任何一個字元 |
[^wang] | 匹配除wang外的任何一個字元 |
[:digit:] | 任意數字,相當於0-9 |
[:lower:] | 小寫字母 |
[:upper:] | 大寫字母 |
[:alpha:] | 任意大小寫字母 |
[:alnum:] | 任意數字或字母 |
[:blank:] | 水平空白字元 |
[:space:] | 水平或垂直空白字元 |
六、練習題
1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的檔案或目錄
ls -a /var/l*[[:digit:]]*[[:lower:]]
2、顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的檔案或目錄
ls -a /etc/[[:digit:]]*[^[:digit:]]
3、顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字元的檔案或目錄
ls -a /etc/[^[:alpha:]]*[[:alpha:]]*
4、顯示/etc/目錄下所有以rc開頭,並後面是0-6之間的數字,其它為任意字元的檔案或目錄
ls -a /etc/rc[0-6]*
5、顯示/etc目錄下,所有以.d結尾的檔案或目錄
ls -a /etc/*.d
6、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的檔案或目錄
ls -a /etc/[mnrp]*.conf
7、只顯示/root下的隱藏檔案和目錄
ls -d /root/.*
8、只顯示/etc下的非隱藏目錄
ls -d /root/[^.]*