前言:
为了能够正确方便的处理shell程序,Linux shell提供了一组测试运算符。通过这些运算符,shell程序能够判断某些条件是否满足条件。条件测试语句在shell判断语句中和循环语句中起到非常重要的作用。
1. 条件测试的基本语法
在shell程序中,用户可以使用测试语句来测试指定条件表达式的条件的真或假。当指定条件为真值之时,整个条件测试结果为0,反之,如果指定条件为假时,其条件测试结果为非0值。
语法:
格式一:
test 条件表达式 #使用test命令进行条件测试表达式的方法,
#test命令和(条件表达式)之间必须要一个(或多个)空格。
格式二:
[ 条件表达式 ] # 使用[]方式去进行条件测试时,注意要表达式与'['前后之间要有一个空格。
格式三:
[[ 条件表达式 ]] # 使用[]方式去进行条件测试时,注意要表达式与'[['前后之间要有一个空格。
2.文件测试表达式
语法格式:
[ 操作符 文件或者是目录 ]
常用的文件测试操作符:
-
- -d 文件 : 文件存在并且是一个目录即为真,则表达式成立
-
- -f 文件 : 文件存在并且是一个普通文件即为真,则表达式成立
-
- -e 文件 : 文件存在即为真,不管该文件是一个普通文件还是一个目录
-
- -r 文件 : 文件存在且可读为真,则表达式成立
-
- -s 文件 : 文件存在切大小不为0字节为真,表达式成立
-
- -w 文件 : 文件存在并且可写为真,表达式成立
-
- -x 文件: 文件存在并且可执行为真,表达式成立
-
- -L 文件: 文件存在并且为链接文件为真,表达式成立
示例:
[root@localhost ~]# touch test{1..9}.txt
[root@localhost ~]# [ -f test10.txt ] && echo yes || echo no
no
[root@localhost ~]# [ -f test1.txt ] && echo yes || echo no
yes
[root@localhost ~]# [ -d test1.txt ] && echo yes || echo no
no
[root@localhost ~]# mkdir test10
[root@localhost ~]# [ -d test10 ] && echo yes || echo no
yes
[root@localhost ~]# ll test10
总用量 0
[root@localhost ~]# [ -e test10 ] && echo yes || echo no
yes
[root@localhost ~]# [ -e test1 ] && echo yes || echo no
no
[root@localhost ~]# [ -e test9 ] && echo yes || echo no
no
[root@localhost ~]# [ -s test9 ] && echo yes || echo no
no
[root@localhost ~]# echo 123 > test9
[root@localhost ~]# ll test9
-rw-r--r--. 1 root root 4 2月 6 11:32 test9
[root@localhost ~]# [ -s test9 ] && echo yes || echo no
yes
[root@localhost ~]# [ -w test9 ] && echo yes || echo no
yes
[root@localhost ~]# chmod a-w test9
[root@localhost ~]# ll test9
--r-------. 1 root root 4 2月 6 11:32 test9
[root@localhost ~]# [ -w test9 ] && echo yes || echo no
no
3.字符串测试表达式
-
- -n “字符串” 若字符串长度不为0,则表达式成立
-
- -z “字符串” 若字符串长度为0,则表达式成立
-
- “字符串1” = “字符串2” 若两个字符串相等,则表达式为真
-
- “字符串1” != “字符串2” 若两个字符串不相等,则表达式为真
示例:
[root@localhost ~]# [ -n "chen" ] && echo yes || echo no
yes
[root@localhost ~]# [ -n "" ] && echo yes || echo no
no
[root@localhost ~]# [ -z "" ] && echo yes || echo no
yes
[root@localhost ~]# [ -z "chen" ] && echo yes || echo no
no
4.整数测试表达式
(1)在[]以及test中使用的比较符号
-
- -eq 相等
-
- -ne 不相等
-
- -gt 大于
-
- -ge 大于等于
-
- -lt 小于
-
- -le 小于等于
示例:
[root@localhost ~]# [ 3 -gt 5 ] && echo yes || echo no
no
[root@localhost ~]# [ 8 -gt 5 ] && echo yes || echo no
yes
[root@localhost ~]# [ 3 -ge 5 ] && echo yes || echo no
no
[root@localhost ~]# [ 5 -ge 5 ] && echo yes || echo no
yes
[root@localhost ~]# [ 5 -ge 3 ] && echo yes || echo no
yes
(2)在[[]]以及(())中使用的比较符号
-
-
==或= 相等
-
-
-
!= 不相等
-
-
-
> 大于
-
-
-
>= 大于等于
-
-
-
< 小于
-
-
-
<= 小于等于
-
示例:
[root@localhost ~]# [ 5 > 3 ] && echo yes || echo no
yes
[root@localhost ~]# [ 5 >= 3 ] && echo yes || echo no
-bash: [: 5: 需要一元表达式
no
5.逻辑操作符
(1)在[]以及test中使用的比较符号
-
- -a 逻辑与
-
- -o 逻辑或
-
- !逻辑非
(2)在[[]]以及(())中使用的比较符号
- !逻辑非
-
- && 逻辑与
-
- || 逻辑或
-
- ! 逻辑非
6.命令执行顺序
- ! 逻辑非
-
-
;使用此符号时命令依次执行,当见面的命令执行错误时,后面的命令依旧执行。
-
示例:
[root@localhost ~]# date;pwd
2021年 02月 06日 星期六 11:58:44 CST
/root
[root@localhost ~]# dat;pwd
-bash: dat: 未找到命令
/root
-
-
&& 使用此符号时,当前面的命令执行成功时才就不会执行后面的命令
-
示例:
[root@localhost ~]# date&&pwd
2021年 02月 06日 星期六 12:01:30 CST
/root
[root@localhost ~]# dat&&pwd
-bash: dat: 未找到命令
[root@localhost ~]# date&&pwda
2021年 02月 06日 星期六 12:02:19 CST
-bash: pwda: 未找到命令
-
-
|| 当前面的命令执行不成功时才会执行后面的命令
-
示例:
[root@localhost ~]# dat||pwd
-bash: dat: 未找到命令
/root
[root@localhost ~]# date||pwd
2021年 02月 06日 星期六 12:04:07 CST