写这篇文章的目的是为了说明Linux系统里文件名匹配时要用的特殊字符

特别注意:要与正则表达式区分开来。

正则表达式见我另外一篇文章:

http://afterdawn.blog.51cto.com/7503144/1855128

匹配模式:元字符

*:匹配任意长度的任意字符

pa*, *pa*, *pa, *p*a*

pa, paa, passwd

?:匹配任意单个字符

pa?, ??pa, p?a, p?a?

pa, paa, passwd

[]:匹配指定范围内的任意单个字符

有几种特殊格式:

[a-z], [A-Z], [0-9], [a-z0-9]

[[:upper:]]:所有大写字母

[[:lower:]]:所有小写字母

[[:alpha:]]:所有字母

[[:digit:]]:所有数字

[[:alnum:]]:所有的字母和数字

[[:space:]]:所有空白字符

[[:punct:]]:所有标点符号

pa[0-9][0-9], 2[0-9][0-9]

[^]:匹配指定范围外的任意单个字符

[^[:upper:]]

[^0-9]

[^[:alnum:]]


练习1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录;
			ls -d /var/l?[[:lower:]]

练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
			ls -d /etc/[0-9]*[^0-9]

练习3:显示/etc目录下,以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录;
			ls -d /etc/[^a-z][a-z]*

练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录;
			cp -r /etc/m*[^0-9] /tmp/magedu.com/

练习5:复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下;
			cp -r /usr/share/man/man[0-9] /tmp/man/

练习6:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下;
			cp -r /etc/[mnrp]*.conf /tmp/conf.d/


特别指出:{}的使用和$?

{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;

例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b

练习:

如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
    mkdir -pv /tmp/x/{y1/{a,b},y2}
如何创建a_c, a_d, b_c, b_d?
    mkdir -v {a,b}_{c,d}

$?:命令的执行状态结果

命令执行的状态结果:

bash通过状态返回值来输出此结果:

     成功:0

     失败:1-255

命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;


命令正常执行时,有的还回有命令返回值:

根据命令及其功能不同,结果各不相同;


引用命令的执行结果:

     $(COMMAND)

     或`COMMAND`


bash的基于特性:引用

     强引用:''

     弱引用:""

     命令引用:``