1、特殊判断符号

判断符号

说明

范例

-a或&&

且,只有前后两个判断条件都成立才为真,-a只能用于test命令和[]中,&&只能用于[[]]中或[]之间

[ 判断条件1 ] && [ 判断条件2 ]

[ 判断条件1 -a 判断条件2 ]

[[ 判断条件1 && 判断条件2 ]]

-o或||

或,前后两个判断条件有一个成立就为真,-o只能用于test命令和[]中,||只能用于[[]]中或[]之间

[ 判断条件1 ] || [ 判断条件2 ]

[ 判断条件1 -o 判断条件2 ]

[[ 判断条件1 || 判断条件2 ]]

!

取反

[ ! 判断条件 ]

()

改变表达式的优先级,注意加转义字符

[[ 判断条件1 && (判断条件2 && 判断条件3) ]]

注:[[]]和[]的区别

A、[[]]是[]的扩充。[[]]能够支持*、<、>等特殊符号,不用转义;

B、使用-a、&&、-o、||时,有着不同的限制;

C、[[]]可以进行算术扩展,而[]不行;

D、[[]]能够使用正则表达式,而[]不行;

C、[[]]可以使用通配符*、?、[list]、{list}和模糊匹配符号=~(符号前的参数包含符号后的参数则为真),而[]不行;

使用$1获取脚本文件后缀参数,并进行判断时需要使用[[]],因为$1可能为空。

Eg:

[root@test ~]# if [[ $USER == r* ]]; then echo "hello,$USER"; else echo $USER not; fi  
hello,root
[root@test ~]# if [ $USER == r* ]; then echo "hello,$USER"; else echo $USER not; fi  
root,not

12shell中的通配符

字符

含义

实例

*

匹配0个或多个任意字符

a*b,a与b之间可以有任意长度的字符,也可以没有。

例如:aabcb,ab,azxcb...

?

匹配一个任意字符

a?b,a与b之间必须但也只能存在一个字符,该字符可以是任意字符。例如:aab,abb,acb...

[list]

匹配list中的任意单个字符

a[xyz]b,a与b之间必须但也只能存在一个字符,该字符只能是x或y或z。

例如:axb,ayb,azb

[!list]

匹配除list中的任意单个字符

a[!a-z]b,a与b之间必须但也只能存在一个字符,该字符不能是小写字母。例如:aAb,a0b...

[c1-c2]

匹配c1-c2间的任意单个字符

a[0-1]b,a与b之间必须但也只能存在一个字符,该字符只能是数字。例如:a0b,a1b...

{string1,string2,...}

匹配string1、string2等中的一个字符串

a{abc,xyz,opq}b,a与b之间必须但也只能存在一个字符串,字符串只能是abc或xyz或opq。

例如:aabcb,axyzb,aopqb...

Eg:

[root@test ~]#  touch file{1,2,3}
[root@test ~]# ls file*
file1  file2  file3
[root@test ~]# ls file[123]
file1  file2  file3
[root@test ~]# ls file[1-3]
file1  file2  file3
[root@test ~]# ls file[1?2]
file1  file2
[root@test ~]# ls file[1?3]
file1  file3
[root@test ~]# ls file[!3] 
file1  file2
[root@test ~]#

个人公众号:

shell study-7day--shell特殊判断符与通配符_shell