Shell通配符

Shell常用通配符

字符 含义 实例
* 匹配0或多个字符 a*b,表示a与b之间可以有任意长度的任意字符,也可以一个都没有,如aabcb、axyzb、a012b、ab
? 匹配任意一个字符 a?b,表示a与b之间必须也只能有一个字符,可以是任意字符,如aab、abb、acb、a0b
[list] 匹配list中的任意单一字符 a[xyz]b,表示a与b之间必须也只能有一个字符,但只能是x或y或z,如:axb、ayb、azb
[!list] 匹配除list中的任意单一字符 a[!0-9],表示a与b之间必须也只能有一个字符,但不能是阿拉伯数字,如axb、aab、a-b
[c1-c2] 匹配c1-c2中的任意单一字符,如:[0-9][a-z] a[0-9]b,表示0与9之间必须也只能有一个字符如a0b、a1b、a9b
{string1,string2} 匹配string1或string2(或更多)其一字符串 a{abc,xyz,123}b,表示a与b之间只能是abc或xzy或123

Shell元字符

字符 说明
^ 只匹配行首
$ 只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
+ 匹配一个或多个字符
? 匹配模式出现频率,例如使用/XY?Z/匹配X Y Z或Y Z
[] 只匹配[]内字符。可以是单个字符,也可以是字符序列。可以使用-表示[]内字符序列范围,如用[1-5]代替[1 2 3 4 5]
[x-y] 匹配以字符范围组成的组中的一个字符
[^] 匹配一个不在范围内的字符
. 只匹配任意单字符
pattern{n} 只用来匹配前面pattern出现次数,n为次数
pattern{n,}m 含义同上,但次数最少为n*
pattern{n,m} 含义同上,但pattern出现次数在n与m之间

Shell转义字符

字符 说明
‘’(单引号) 又叫硬转义,其内部所有的Shell元字符、通配符都会被关掉。注:硬转义中不允许出现’(单引号)
(反斜杠) 又叫转义,去除其后紧跟的元字符或通配符的特殊意义

Shell逻辑运算符及表达式

条件运算符

运算符号 代表意义 应用 说明
= 等于 整型或字符串比较:str1=str2 字符串str1和字符串str2相等时返回真,如果在[]中,只能是字符串
== 等于 整型或字符串比较:str1==str2 字符串str1和字符串str2相等时返回真,如果在[]中,只能是字符串
!= 不等于 整型或字符串比较:str1!=str2 字符串str1和字符串str2不相等时返回真,如果在[]中,只能是字符串
< 小于 整型或字符串比较:str1<str2 按字典顺序排序,字符串str1在字符串str2之前,在[]中,它表示字符串,如需使用请转义<
> 大于 整型或字符串比较:str1>str2 在[]中,它表示字符串,如需使用请转义>
-eq 等于 整型比较:int1 -eq int2 如果int1等于int2,则返回真
-ne 不等于 整型比较:int1 -ne int2 如果int1不等于int2,则返回真
-lt 小于 整型比较:int1 -lt int2 如果int1小于int2,则返回真
-gt 大于 整型比较:int1 -gt int2 如果int1大于int2,则返回真
-le 小于或等于 整型比较:int -le int2 如果int1小于或等于int2,则返回真
-ge 大于或等于 整型比较:int1 -ge int2 如果int1大于或等于int2,则返回真
-z 空字符串 字符串比较:-z string 字符串string为空串(长度为0)时返回真
-n 非空字符串 字符串比较:-n string 字符串string为非空字符串时返回真

逻辑运算符

运算符号 代表意义 应用 说明
-a 双方都成立(and) 逻辑表达式 -a 逻辑表达式 在[]表达式中使用
-o 单方成立(or) 逻辑表达式 -o 逻辑表达式 在[]表达式中使用
! 逻辑否,条件为假,结果为真    
&& 双方都成立(and) 逻辑表达式 && 逻辑表达式 在[[]]表达式中使用
\ \   单方成立(or)

文件和目录判断符

逻辑符号 代表意义 应用 说明
-f 判断文件是否存在 -f filename 当filename存在并且是正规文件时返回真
-d 判断目录是否存在 -d pathname 当pathname存在并且是一个目录时返回真
-b 判断是否为一个块文件 -b filename 当filename存在并且是块文件时返回真(返回0)
-c 判断是否为一个字符文件 -c filename 当filename存在并且是字符文件时返回真
-S 判断是否为一个socket -S filename 当filename存在并且是socket时返回真
-L 判断是否为一个符号链接文件 -L filename 当filename存在并且是符号链接文件时返回真
-e 判断文件或目录是否存在 -e pathname 当由pathname指定的文件或目录存在时返回真

程序的逻辑卷标判断符

逻辑符号 代表意义 应用 说明
-G 判断是否由GID所执行的程序所拥有 -G pathname 当由pathname指定的文件或目录存在,并且属于当前进程有效用户ID的用户的用户组时返回真
-O 判断是否由UID所执行的程序所拥有 -O pathname 当由pathname指定的文件或目录存在,并且被当前进程有效用户ID的用户拥有时返回真
-p 判断是否为程序间传送信息的命名管道或FIFO -p filename 当filename存在并且是命名管道时返回真

档案的属性判断符

逻辑符号 代表意义 应用 说明
-r 判断是否为可读的属性 -r pathname 当由pathname指定的文件或目录存在并且可读时返回真
-w 判断是否为可以写入的属性 -w pathname 当由pathname指定的文件或目录存在并且可写时返回真
-x 判断是否为可执行的属性 -x pathname 当由pathname指定的文件或目录存在并且可执行时返回真
-s 判断是否为非空白档案 -s filename 当filename存在并且文件大小大于0时返回真
-u 判断是否具有SUID的属性 -u pathname 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-g 判断是否具有SGID的属性 -g pathname 当由pathname指定的文件或目录存在并且设置了SGID位时返回真
-k 判断是否具有粘滞的属性 -k pathname 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真

两个档案之间的判断与比较符

逻辑符号 代表意义 应用 说明
-nt 第一个比第二个档案新 file1 -nt file2 file1比file2新时返回真
-ot 第一个比第二个档案旧 file1 -ot file2 file1比file2旧时返回真
-ef 第一个与第二个档案为同一个档案 file1 -ef file2 file1和file2是同一个档案时返回真