Shell 中的条件测试

shell提供了两种形式的条件测试 test 和 [ 都是shell的内置类型

root@localhost Shell]# type test
test is a shell builtin
[root@localhost Shell]# type [
[ is a shell builtin
[root@localhost Shell]# 

1) 数字测试

int1 -eq int2 如果int1 等于int2,则返回真
int1 -ne int2 如果int1 不等于int2,则返回真
int1 -lt int2 如果int1 小于int2,则返回真
int1 -le int2 如果int1 小于等于int2,则返回真
int1 -gt int2 如果int1 大于int2,则返回真
int1 -ge int2 如果int1 大于等于int2,则返回真

也可以使用c语言风格的 (()) 测试:

< 小于(在双括号里使用) (("$a" < "$b"))
<= 小于等于 (在双括号里使用) (("$a" <= "$b"))
> 大于 (在双括号里使用) (("$a" > "$b"))
>= 大于等于(在双括号里使用) (("$a" >= "$b"))
2) 字符串测试


-z string 字符串string 为空串(长度为0)时返回真
-n string 字符串string 为非空串时返回真
str1 = str2 字符串str1 和字符串str2 相等时返回真
str1 == str2 同 =
str1 != str2 字符串str1 和字符串str2 不相等时返回真
str1 < str2 按字典顺序排序,字符串str1 在字符串str2 之前
str1 > str2 按字典顺序排序,字符串str1 在字符串str2 之后

3) 文件测试

-b filename 当filename 存在并且是块文件时返回真(返回0)
-c filename 当filename 存在并且是字符文件时返回真
-d pathname 当pathname 存在并且是一个目录时返回真
-e pathname 当由pathname 指定的文件或目录存在时返回真
-f filename 当filename 存在并且是正规文件时返回真
-g pathname 当由pathname 指定的文件或目录存在并且设置了SGID 位时返回真
-h filename 当filename 存在并且是符号链接文件时返回真 (或 -L filename)
-k pathname 当由pathname 指定的文件或目录存在并且设置了"粘滞"位时返回真
-p filename 当filename 存在并且是命名管道时返回真
-r pathname 当由pathname 指定的文件或目录存在并且可读时返回真
-s filename 当filename 存在并且文件大小大于0 时返回真
-S filename 当filename 存在并且是socket 时返回真
-t fd 当fd 是与终端设备相关联的文件描述符时返回真
-u pathname 当由pathname 指定的文件或目录存在并且设置了SUID 位时返回真
-w pathname 当由pathname 指定的文件或目录存在并且可写时返回真
-x pathname 当由pathname 指定的文件或目录存在并且可执行时返回真
-O pathname 当由pathname 存在并且被当前进程的有效用户id 的用户拥有时返回真(字母O 大写)
-G pathname 当由pathname 存在并且属于当前进程的有效用户id 的用户的用户组时返回真
file1 -nt file2 file1 比file2 新时返回真
file1 -ot file2 file1 比file2 旧时返回真
f1 -ef f2 f1和h2都是同一个文件的硬链接

在[ 测试中可以使用-a -o  ! 表示逻辑与,或,非


在[[ 中使用&&或者||



一个有意思的测试:


[root@localhost Shell]# if [ 0 ] 
> then
> echo "0 is true"
> else 
> echo "0 is false"
> fi
0 is true
[root@localhost Shell]# 


[root@localhost Shell]# if [ 1 ] ; then echo "1 is true"; else  echo "1 is false"; fi
1 is true
[root@localhost Shell]# 


在shell中0代表true,非零代表false,为什么这里都是true呢

因为在条件测试中,0和1只是表达式,shell为解析表达式,这个表达式是一个单数字的表达式,shell会返回这个表达式的值为0和1 但是表达式自身正确,因此都返回0,(注意执行表达式返回值和表达式计算值的区别)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值