【总结】超全shell条件测试命令及语法

本文详细介绍了Shell中的条件测试命令,包括test、[]、[[和((的语法及用法,并展示了文件测试表达式、字符串测试表达式和整数测试表达式的操作符。同时,还涵盖了逻辑操作符的使用,帮助读者掌握Shell脚本中的条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条件测试命令及其语法

条件测试语法说明
语法1: test <测试表达式>test命令和<测试表达式>之间至少有一个空格
语法2:[ <测试表达式> ]该方法和test命令的用法一样,[]的边和内容之间至少有一个空格
语法3:[[ <测试表达式> ]]比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可以使用通配符等进行模式匹配
语法4:((<测试表达式>))一般用于if语句里,双小括号两端不需要有空格,测试对象只能是整数
[root@haha day2]# test 1 -lt 2
[root@haha day2]# echo $?
0
[root@haha day2]# test 3 -lt 2
[root@haha day2]# echo $?
1
[root@haha day2]# [ 1 -gt 2 ]
[root@haha day2]# echo $?
1
[root@haha day2]# [ 3 -gt 2 ]
[root@haha day2]# echo $?
0
[root@haha day2]# [[ 1 > 2 ]]
[root@haha day2]# echo $?
1
[root@haha day2]# [[ 1 < 2 ]]
[root@haha day2]# echo $?
0
[root@haha day2]# ((1>2))
[root@haha day2]# echo $?
1
[root@haha day2]# ((1<2))
[root@haha day2]# echo $?
0

文件测试表达式

常用的文件测试操作符说明
-a/-e 文件文件是否存在
-b 文件文件是否存在,且为块文件,如果文件存在且是一个块文件,则结果为0
-c 文件文件是否存在且为字符文件,如果文件存在且是一个字符文件,则结果为0
-L 文件文件存在且为链接文件则为真
-d 文件文件存在且为目录则为真,即测试表达式成立
-f 文件文件存在且为普通文件则为真,即测试表达式成立
-s 文件文件存在且文件大小不为0则为真
-u 文件文件是否设置suid位,如果设置了suid,则结果为0
-r 文件文件存在且可读为真
-w 文件文件存在且可写为真
-x 文件文件存在且可执行则为真
f1 -nt f2,nt为newerthan文件f1比文件f2新则为真,根据文件的修改时间来计算
f1 -ot f2,ot为olderthan文件f1比文件f2旧则为真,根据文件的修改时间来计算
[root@haha day2]# touch test_a
[root@haha day2]# test -w test_a &&echo  "true"
true
[root@haha day2]# test -r test_a &&echo  "true"
true
[root@haha day2]# test -x test_a &&echo  "true"
true
[root@haha day2]# test -a test_a &&echo  "true"
true
[root@haha day2]# mkdir test_b
[root@haha day2]# [ -d test_b ]&&echo "true"
true
[root@haha day2]# [ -s test_b ]&&echo "true"
true

字符串测试表达式

常用字符串测试操作符说明
-n “字符串”若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为nozero
-z “字符串”若字符串的长度为0,则为真,z可以理解为zero
“串1”=“串2”若字符串1等于字符串2,则为真,可使用==代替=
“串1”!=“串2”若字符串1不等于字符串2,则为真
[root@haha day2]# echo $var_test 
1233211234567
[root@haha day2]# [[ -n var_test ]]
[root@haha day2]# echo $?
0
[root@haha day2]# echo $var_t

[root@haha day2]# [[ -z var_t  ]]
[root@haha day2]# echo $?
1
[root@haha day2]# test $var_test = $var_t
[root@haha day2]# echo $?
1
[root@haha day2]# test $var_test != $var_t
[root@haha day2]# echo $?
0

整数测试表达式

在[]以及test中使用的比较符号在(())和[[]]中使用的比较符号说明
-eq==或=相等,全拼为equal
-ne!=不相等,全拼为not equal
-gt>大于,全拼为greater than
-ge>=大于等于,全拼为greaterequal
-lt<小于,全拼为less than
-le<=小于等于,全拼为less equal

逻辑操作符

在[]中使用的逻辑操作符在test、[[]]和(())中使用的逻辑操作符说明
-a&&and,与,两端都为真,则结果为真
-ollor,或,两端有一个为真,则结果为真
not,非,两端相反,则结果为真
[root@haha day2]# [ $var_test -lt 0 -a $var_t -gt 0 ]
[root@haha day2]# [ $var_test -lt 0 -a $var_t -gt 0 ]
[root@haha day2]# echo $?
1
[root@haha day2]# [ $var_test -ge 0 -a $var_t -gt 0 ]
[root@haha day2]# echo $?
0
[root@haha day2]# [ $var_test -le 0 -o $var_t -gt 0 ]
[root@haha day2]# echo $?
0
[root@haha day2]# [ $var_test -le 0 -o $var_t -lt 0 ]
[root@haha day2]# echo $?
1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值