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
12、shell中的通配符
字符 | 含义 | 实例 |
* | 匹配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 ~]#
个人公众号: