linux条件测试的三种,shell编程之条件测试 | 旺旺知识库

一、条件测试语法:

test 测试内容

[ 测试内容 ]      ##注意中括号与测试内容间有空格

[[ 测试内容 ]]

(( 测试内容 ))   ##只能用于测试数值大小,后面详解

前三种测试语法基本等同。

二、数值测试:

2.1 常见的数值测试:

int1 -eq int2 如果int1 等于int2,则返回真

int1 -ne int2 如果int1 不等于int2,则返回真

int1 -lt int2 如果int1 小于int2,则返回真

int1 -gt int2 如果int1 大于int2,则返回真

int1 -le int2 如果int1 小于等于int2,则返回真

int1 -ge int2如果int1 大于等于int2,则返回真

2.2 在((  ))中测试

< 小于(在双括号里使用) (("int1" < "int2"))  等同于 [ int1 -lt int2 ]

[root@server1 ~]# (( "2" < "3" ))

[root@server1 ~]# echo $?

0

[root@server1 ~]# [ 1 -lt 3 ]

[root@server1 ~]# echo $?

0

<= 小于等于 (在双括号里使用) (("int1" <= "int2"))   等同于 [ int1 -ne int2 ]

> 大于 (在双括号里使用) (("int1" > "int2"))  等同于 [ int1 -gt int2 ]

>= 大于等于(在双括号里使用) (("int1" >= "int2")) 等同于 [ int1 -ge int2 ]

注意:双括号测试不能测试数值相等的情况,使用双括号测试等于是会报如下错误:

[root@server1 ~]# (( "2" = "3" ))

-bash: ((: 2 = 3 : attempted assignment to non-variable (error token is "= 3 ")

3、测试字符串:

-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 之后,一般不会用到

测试示例:

[root@server1 ~]# A=str

[root@server1 ~]# B=str

[root@server1 ~]# [ $A = $B ]

[root@server1 ~]# echo $?

0

[root@server1 ~]# B=Str

[root@server1 ~]# [ $A = $B ]

[root@server1 ~]# echo $?

1

[root@server1 ~]# [ -n $B ]

[root@server1 ~]# echo $?

0

[root@server1 ~]# [ -z $B ]

[root@server1 ~]# echo $?

1

4、文件测试:

-b FILE存在并且是块文件时返回真;

-c FILE存在并且是字符文件时返回真;

-e FILE 文件或目录存在时返回真;

-f FILE 文件为普通文件时返回真;

-d FILE 指定路径为目录时返回真;

-r FILE 当前用户对指定文件有读取权限时返回真;

-w FILE 当前用户对指定的目录或文件存在并并可写时返回真;

-x FILE 当前用户对指定的文件或目录存在并且可执行时返回真;

-s FILE 指定文件存在并且文件大小大于0时返回真

-O FILE 存在并且属于当前进程的有效用户id 的用户的用户组时返回真

-G FILE 存在并且属于当前进程的有效用户id 的用户的用户组时返回真

FILE1 -nt FILE2 当FILE1比FILE2新时返回真

FILE1 -ot FILE2 当FILE1比FILE2旧时返回真

FILE1 -ef FILE2 当FILE1和FILE2硬链接到同一个文件时返回真

测试示例:

[root@server1 ~]# [ -d /etc/sysconfig/network ]

[root@server1 ~]# echo $?

1

[root@server1 ~]# [ -d /etc/sysconfig/network-scripts ]

[root@server1 ~]# echo $?

0

5、在测试中使用逻辑操作符:

5.1 单[]中的逻辑测试符

-a 逻辑与,操作符两边均为真,结果为真,否则为假

-o 逻辑或,操作符两边一边为真,结果为真,否则为假

! 逻辑否,条件为假,结果为真

测试示例:

[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -o -e /etc/fstabs ]

[root@server1 ~]# echo $?

0

[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -a -e /etc/fstabs ]

[root@server1 ~]# echo $?

1

[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -a -e /etc/fstab ]

[root@server1 ~]# echo $?

0

[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -o -e /etc/fstabs ]

[root@server1 ~]# echo $?

0

[root@server1 ~]# [ ! -e /etc/fstabs ]

[root@server1 ~]# echo $?

0

[root@server1 ~]# [ -e /etc/fstabs ]

[root@server1 ~]# echo $?

1

##注意标红部分不一样的地方

5.2 双[[]]中的逻辑测试符:

&& 逻辑与,操作符两边均为真,结果为真,否则为假,功能上与 -a 相同

||  逻辑或,操作符两边一边为真,结果为真,否则为假,功能上与 -o 相同

测试示例:

[root@server1 ~]# [ -b /dev/sdb -a -e /etc/fstab ]

[root@server1 ~]# echo $?

0

[root@server1 ~]# [[ -b /dev/sdb && -e /etc/fstab ]]

[root@server1 ~]# echo $?

0

[root@server1 ~]# [[ -b /dev/sdb && -e /etc/fstabs ]]

[root@server1 ~]# echo $?

1

[root@server1 ~]# [[ -b /dev/sdb || -e /etc/fstabs ]]

[root@server1 ~]# echo $?

0

另外,测试还支持通配符,如:

[root@server1 ~]# [ -e /etc/in*t ]

[root@server1 ~]# echo $?

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值