Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  shell  >  正文 shell编程基础之条件测试

shell编程基础之条件测试

发布时间:2014-10-19   编辑:www.jquerycn.cn
本文介绍下,shell编程的基础内容之有关条件测试的相关知识,有需要的朋友参考下。

在linux shell中,有时需要判断字符串是否相等,有时需要检查文件状态或进行数字测试。

那么,本节就带领大家学习下shell脚本中有关条件测试的相关知识。

1、文件测试
测试文件状态的操作符如下:
 

-d 目录 -s 文件长度大于0、非空
-f 正规文件 -w 可写
-L 符号连接 -u 文件有suid位设置
-r 可读 -x 可执行

测试时使用逻辑操作符
测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此功能。
 

-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。

1)、比较两个文件:
 

复制代码 代码示例:
[root@localhost ~]# ls -l results.txt scores.txt
-rwxr-xr-x 1 root root 0 Nov 21 12:22 results.txt
-rw-r--r-- 1 root root 0 Nov 21 12:15 scores.txt

2)、测试两个文件是否均可读。
 

复制代码 代码示例:
[root@localhost ~]# [ -w results.txt -a -w scores.txt ]
[root@localhost ~]# echo $?
0
结果为真。

2、字符串测试
字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。
字符串测试的操作符有三种。
 

== 两个字符串相等
!= 两个字符串不等
-z 字符串为空
-n 非空字符串

3、测试数值
测试数值可以使用许多操作符,可以是:
 

-eq 数值相等
-ne 数值不相等
-gt 第一个数大于第二个数
-lt 第一个数小于第二个数
-le 第一个数小于等于第二个数
-ge 第一个数大于等于第二个数

测试两个数是否相等(130是否等于130)。
 

复制代码 代码示例:
[root@localhost ~]# NUMBER=130
[root@localhost ~]# [ "$NUMBER" -eq "130" ]
[root@localhost ~]# echo $?
0
结果果然正确。

可以不必将整数值放入变量,直接用数字比较即可,但要加引号。
 

复制代码 代码示例:
[root@localhost ~]# [ "990" -le "995" ]
[root@localhost ~]# echo $?
0

可以用逻辑操作符将两个测试表达式结合起来。
仅需要用到一对方括号,而不能用两个,否则将返回错误信息“ too many arguments”。
 

复制代码 代码示例:
[root@localhost ~]# [ "990" -le "995" ] -a [ "123" -gt "33" ]
-bash: [: too many arguments

测试两个表达式,如果都为真,结果为真,正确使用方式应为:
 

复制代码 代码示例:
[root@localhost ~]# [ "990" -le "995" -a "123" -gt "33" ]
[root@localhost ~]# echo $?
0

4、test、[] 、[[]]、(())的异同
[[ 是 bash 程序语言的关键字,而其他是内建命令!
 

$ type [ [[ test
[ is a shell builtin
[[ is a shell keyword
test is a shell builtin
 

注意:
很多时候,这个三个功能通用。但是命令和关键字总是有区别的。
如果是命令,它把参数作为比较表达式或文件测试,并且根据比较结果,返回一个退出码。那样比如 ">" "<" 就被 shell 解释为重定向符号了。
关键字却不这样。关键字把整个表达式看作一个单独的元素,并且返回一个退出码。[[]]结构比[]更灵活,是一个扩展的test命令。
(())可以应用于算术表达式的运算,并将结果作为退出码。如果表达式结果为0,则返回1作为退出码,否则返回0作为退出码。

有关shell脚本中条件测试的基础内容,就介绍这些了,希望对大家有所帮助。

您可能感兴趣的文章:
为shell编程新手准备的教程
shell编程基础之条件测试
shell编程基础知识(6)-条件测试
shell批量修改文件后缀名
shell编程基础知识(1)-文件类型介绍
学习linux shell中 if else以及大于、小于、等于逻辑表达式
shell脚本编程基础知识(8)-脚本调试
linux shell学习之shell流程控制
golang 示例测试example_Golang基础入门11 | Testing
inux shell初级入门教程

[关闭]