歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Linux下Shell編程——通配

通配
 
bash Shell本身不支持正則表達式,使用正則表達式的是Shell命令和工具,如grep、sed、awk等。但是,bash Shell可以使用正則表達式中的一些元字符實現通配(Globbing)功能,通配是把一個包含通配符的非具體文件名擴展存儲在計算機、服務器或者網絡上的一批具體文件名的過程。
 
例:列出以.awk結尾文件的詳細信息
 
執行:ls -l *.awk
 
結果:-rwxrwxr-x 1 xiaomiaoxiaomiao  59 8月  28 16:32 argv.awk
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  80 8月  28 16:17 array.awk
 
      -rwxrwxr-x 1 xiaomiao xiaomiao 186 8月  28 16:45findphone.awk
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  73 8月  28 15:19 pass.awk
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  50 8月  28 09:29 scr1.awk
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  77 8月  28 11:15 scr2.awk
 
      -rw-rw-r-- 1 xiaomiao xiaomiao  36 8月  28 09:23 scr.awk
 
 
 
例:列出以a~h范圍內字母開頭,以.awk結尾的文件
 
執行:ls -l [a-h]*.awk
 
結果:-rwxrwxr-x 1 xiaomiaoxiaomiao  59 8月  28 16:32 argv.awk
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  80 8月  28 16:17 array.awk
 
      -rwxrwxr-x 1 xiaomiao xiaomiao 186 8月  28 16:45findphone.awk
 
 
 
例:列出以g~h范圍內字母開頭,不以.awk結尾的文件
 
執行:ls -l [g-h]*.[^awk]*
 
結果:-rwxrwxr-x 1 xiaomiaoxiaomiao  280 8月  17 17:16getopts_exam1.sh
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  286 8月  17 17:15getopts_exam1.sh~
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  466 8月  17 17:04getopts_exam2.sh
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  466 8月  17 17:00getopts_exam2.sh~    -rw-r--r-- 1 root    root    2760 8月  23 14:32 gmond_msg_1.txt
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  364 8月  22 10:13 htmlconver2.sh
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  333 8月  22 09:52htmlconver.sh
 
      -rwxrwxr-x 1 xiaomiao xiaomiao  331 8月  22 09:51htmlconver.sh~
 
 
 
例:列出匹配[a-c]*.awk或0?.pem的所有文件
 
執行:ls -l{[a-c]*.awk,0?.pem}
 
結果:ls: 無法訪問0?.pem: 沒有那個文件或目錄
 
      -rwxrwxr-x 1 xiaomiao xiaomiao 59 8月  28 16:32 argv.awk
 
      -rwxrwxr-x 1 xiaomiao xiaomiao 80 8月  28 16:17 array.awk
 
注意,{}符號內的表達式是“或”的關系,即只要有{}符號內的一個表達式的文件,就能被列出。
 
通配的結果由計算機搜索大量的文件或者目錄進行匹配而輸出,通配對處理能力和內存資源有很高的需求。黑客輸入包含通配符的文件名故意讓服務器重復和連續不斷地進行通配可能引起的拒絕服務攻擊。因此,大型服務器經常通過限制服務器執行通配功能的次數、限制一個具體用戶每次輸入的通配符或者如果通配符太普通,則拒絕執行通配等方法來提高服務器的安全性。
 
內部變量GLOBIGNORE保存了通配時所忽略的文件名集合,?、*、[]、{}、^五個符號和GLOBIGNORE變量構成了Shell通配的所有內容。
Copyright © Linux教程網 All Rights Reserved