5.1、语法
- (1)test condition
- (2)[ condition ]:注意condition前后要有空格
注意: 条件非空即为 true, [ atguigu ]返回 true, [ ] 返回 false。
5.2、常用判断条件
5.2.1、两个字符串之间比较
注意:如果是字符串之间比较,用等号“=”判断相等,用“!=”判断不等,=和!=前后都要有空格
语法 | 说明 |
---|---|
[ $a = $b ] | 把变量a和b都作为字符串,来判断这俩变量是否相等 |
[ $a != $b ] | 把变量a和b都作为字符串,来判断这俩变量是否不相等 |
[ $a = “ready” ] | 判断变量a是否等于字符串"ready" |
5.2.2、两个整数之间比较
下面的变量
$a
和$b
也可以是常量
语法 | 说明 |
---|---|
[ $a -eq $b ] | 判断a=b(equal) |
[ $a -ne $b ] | 判断a!=b(not equal) |
[ $a -lt $b ] | 判断a<b(less than) |
[ $a -le $b ] | 判断a<=b(less equal) |
[ $a -gt $b ] | 判断a>b(greater than) |
[ $a -ge $b ] | 判断a>=b(greater equal) |
5.2.3、按照文件权限进行判断
语法 | 说明 |
---|---|
[ -r 文件 ] | 判断文件是否有可读权限 |
[ -w 文件 ] | 判断文件是否有可写权限 |
[ -x 文件 ] | 判断文件是否有可执行权限 |
5.2.4、按照文件类型进行判断
语法 | 说明 |
---|---|
[ -e 文件 ] | 判断文件是否存在 |
[ -f 文件 ] | 文件存在并且是一个常规的文件(file) |
[ -d 文件 ] | 文件存在并且是一个目录(dirctory) |
5.3、使用$?获取条件判断的结果,0:表示true,1:表示false
shell中的条件判断返回值比较特殊,
0
:表示true
,1
:表示false
[root@jenkins ~]# [ 1 -lt 2 ]
[root@jenkins ~]# echo $?
0
[root@jenkins ~]# [ 1 -gt 2 ]
[root@jenkins ~]# echo $?
1
[root@jenkins ~]#
5.4、案例
(1)整数判断
#使用test语法判断10>9
[root@jenkins ~]# test 10 -gt 9
[root@jenkins ~]# echo $?
0
# 打印出上面的判断结果,输出0,表示结果为真
[root@jenkins ~]# [ 1 -gt 3 ]
[root@jenkins ~]# echo $?
1
[root@jenkins ~]#
(2)文件权限判断
# 使用ll查看一下文件列表,当前root用户,对于1.txt有rw权限
[root@jenkins ~]# ll
total 12
-rw-r--r-- 1 root root 0 Sep 3 18:07 1.txt
drwxr-xr-x 2 root root 6 Jul 5 23:15 aashi
-rw-------. 1 root root 1429 Dec 28 2022 anaconda-ks.cfg
-rwxr-xr-x 1 root root 30 Aug 5 23:16 helloworld.sh
-rwxr-xr-x 1 root root 448 Aug 10 10:13 str.sh
[root@jenkins ~]# [ -r 1.txt ]
# 判断当前用户对1.txt是否有r权限,结果为0,表示true
[root@jenkins ~]# echo $?
0
[root@jenkins ~]# [ -x 1.txt ]
[root@jenkins ~]# echo $?
1
# 判断当前用户对1.txt是否有x权限,结果为1,表示false
[root@jenkins ~]#
(3)根据文件类型判断
# 1.txt为普通文件,bash为目录
[root@jenkins ~]# [ -e 3.txt ]
[root@jenkins ~]# echo $?
1
# 判断3.txt是否存在,返回1,表示false
[root@jenkins ~]# [ -e 1.txt ]
[root@jenkins ~]# echo $?
0
# 判断1.txt是否存在,返回0,表示true
[root@jenkins ~]# [ -f 1.txt ]
[root@jenkins ~]# echo $?
0
[root@jenkins ~]# [ -d 1.txt ]
[root@jenkins ~]# echo $?
1
# 判断1.txt是否是目录,返回1,表示false
[root@jenkins ~]# [ -d /root/bash ]
[root@jenkins ~]# echo $?
1
# 判断/root/bash是否是目录,返回0,表示true
[root@jenkins ~]#
(4)多条件判断(&&、||)
多条件判断(&& 表示前一条命令执行成功时, 才执行后一条命令, || 表示上一条命令执行失败后, 才执行下一条命令)
案例1:多条件判断
[root@jenkins ~]# [ 3 -gt 2 ] && [ 2 -gt 1 ]
[root@jenkins ~]# echo $?
0
# 3>2 && 2>1,返回0,表示ture
[root@jenkins ~]# [ 3 -gt 2 ] && [ 2 -lt 1 ]
[root@jenkins ~]# echo $?
1
[root@jenkins ~]# [ 3 -lt 2 ] || [ 3 -lt 2 ]
[root@jenkins ~]# echo $?
1
# 3<2 || 3<2,返回1,表示false
[root@jenkins ~]#
案例2:模仿3元运算符(a?b:c)
[root@jenkins ~]# a=10
[root@jenkins ~]# b=9
[root@jenkins ~]# [ $a -gt $b ] && echo "$a>$b为true" || "$a>$b为false"
10>9为true
# 若a>b,输出a>b为true,否则输出a>b为false,相当于实现了(a?b:c)3元运算符