shell脚本条件测试与比较

1、条件测试常用语法

test 测试表达式 利用test命令进行条件测试表达式,test命令与测试表达式之间至少有一个空格
[ 测试表达式 ] 通过[ ]中括号进行条件测试表达式,[]中括号边界与测试表达式之间至少有一个空格
[[ 测试表达式 ]] 通过[[ ]]双中括号进行条件测试表达式,[[ ]]双中括号与测试表达式之间至少有一个空格
((测试表达式)) 通过(( ))双小括号进行条件测试表达式,( ))双小括号两端不需要空格,常用于整数对比

说明:

  • 双中括号[[ ]]中可以使用通配符进行匹配,这是其区别于其它几种语法的地方
  • &&,||,<,>等操作符可用于双中括号[[ ]]中,但不能应用于[ ]中,在[ ]中一般用-a,-o,-lt,-gt来代替

举例:

1 test -f /tmp/test.txt && echo 1 || echo 0
2 [ -f /tmp/test.txt ] && echo 1 || echo 0
3 [[ -f /tmp/test.txt ]] && echo 1 || echo 0
4 ((3>2)) && echo 1 || echo 0

2、测试表达式用法

2.1、文件测试表达式

-d 文件 文件存在且为目录则为真
-f 文件 文件存在且为普通文件则为真
-e 文件 文件存在则为真,不辩别是目录还是文件
-s 文件 文件存在且文件大小不为0则为真
-r 文件 文件存在且可读则为真,与执行脚本的用户权限也有关
-w 文件 文件存在且可写则为真,与执行脚本的用户权限也有关
-x 文件 文件存在且可执行则为真,与执行脚本的用户权限也有关
-L  文件 文件存在且为链接文件则为真
f1 -nt f2 文件f1比文件f2新则为真,根据文件的修改时间计算
f1 -ot f2  文件f1比文件f2旧则为真,根据文件的修改时间计算

2.2、字符串测试表达式

-n "字符串" 若字符串的长度不为0,则为真
-z "字符串" 若字符串的长度为0,则为真
"串1" = "串2" 若字符串1等于字符串2则为真,可用"=="代替"="
"串1" != "串2" 若字符串1不等于字符串2则为真,可用"!=="代替"!="

注意:

  • 对于字符串的比较,一定要将字符串加比引号后再比较。如[ -n "$string" ]
  • =与!=可用于判断两个字符串是否相同

2.3、整数操作符

在[]和test中使用 在[[ ]]和(( ))中使用 说明
-eq ==或= 等于,全拼为equal
-nq != 不等于,全拼为not equal
-gt > 大于,全拼为greater than
-ge >= 大于等于,全拼为greater equal
-lt < 小于,全拼为less than
-le <= 小于等于,全拼为less equal

2.4、逻辑操作符

在[]和test中使用 在[[ ]]和(( ))中使用 说明
-a && and,与,两端都为真,则结果为真
-o || or,或,两端有一个为真,则结果为真
! ! not,非,两端相反,则结果为真

2.5、测试表达式的区别总结

测试表达式符号 test [ ] [[ ]] (( ))
边界是否需要空格 需要 需要 需要 不需要
逻辑操作符 !、-a、 -o !、-a、 -o !、&&、|| !、&&、||
整数比较操作符 -eq、-ne、-lt、-gt、-ge、-le -eq、-ne、-lt、-gt、-ge、-le
-eq、-ne、-lt、-gt、-ge、-le或

=、!=、<、>、>=、<=

=、!=、<、>、>=、<=
字符串比较操作符 =、==、!= =、==、!= =、==、!= =、==、!=
是否支持通配符 不支持 不支持 支持 不支持

原文地址:https://www.cnblogs.com/hovin/p/11244586.html

时间: 2024-07-30 12:01:04

shell脚本条件测试与比较的相关文章

Shell脚本---条件判断

面向过程     顺序执行     选择执行:if;case     循环执行:for;while;until   循环需有退出条件 选择执行(选择执行的前提,就是条件测试)    条件测试方式(测试条件)     bash命令测试          bash命令有命令执行状态返回值          $?:用于上一条执行的命令状态返回值          0:成功执行          1-255:失败          可以使用exit命令,在脚本中自定义脚本状态返回值,如果不定义,脚本的状

[转]如何进行SHELL脚本正确性测试

在实际工作中,需要对shell脚本进行正确性测试. 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严谨的,若是未经过QA,风险还是相当大的. 以下即shell脚本测试流程,仅供参考 1.代码走读: 写完,或者拿到一个shell脚本,不必急于运行,虽然实践是检验整理的唯一标准,但是,在读代码这个过程中,可以规避很多低级的bug. 读什么? A.代码逻辑,这个脚本用来做什么,主要分为多少步,分别做了什

手游公司运维之利用Rundeck自动化运维工具和Shell脚本构建测试环境代码发布平台和生产环境代码发布平台

在做手游运维工作之前,我接触的代码发布都是常规的软件发布,有固定的发布周期.之前工作的那个外企有严格的发布周期,一年中的所有发布计划都是由Release Manager来控制,每次发布之前都需要做一些准备工作,如填写发布表单,上传发布需要的资源文件,联系发布过程中的相关人员,如开发和测试.最后在公司内部开发的发布平台上按照指定的时间点击鼠标对一个集群内的几台主机或全部主机进行代码发布.这个发布平台还是基于rsync服务实现的.虽然每个星期都有各种服务的发布,但是整个发布流程是可以控制的,并且发布

shell脚本,测试

首先我们要了解脚本的内容和格式 首行必须是shebang(解释器路径),shebang必须占据绝对行首 在shell脚本中,除了shebang之外,以#占据据对行首的内容,均为注释行,解释器会自动忽略这样的行内容 为了能在程序中突出程序的功能,适当的添加空白行,以分隔不同的源代码块 有一定的缩进 利用bash脚本编程实现算术运算: +.- *./ %:模运算,取余数 **|^ 增强型的算数运算符号 +=: let B=B+2-->let B+=2 -=  let B=B+2-->let B-=

如何进行shell脚本正确性测试

在实际工作中,需要对shell脚本进行正确性测试. 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严谨的,若是未经过QA,风险还是相当大的. 以下即shell脚本测试流程,仅供参考 1.代码走读: 写完,或者拿到一个shell脚本,不必急于运行,虽然实践是检验整理的唯一标准,但是,在读代码这个过程中,可以规避很多低级的bug. 读什么? A.代码逻辑,这个脚本用来做什么,主要分为多少步,分别做了什

shell脚本编程测试类型上

一bash的条件测试 判断某需求是否满足,需要由测试机制来实现.专用的测试表达式需要由测试命令辅助完成测试过程. 评估布尔声明,以便用在条件性执行中.若真,则返回0:若假,则返回1. 测试命令:• test EXPRESSION• [ EXPRESSION ]• [[ EXPRESSION ]]和上面两个不同的在于支持正则表达式注意:EXPRESSION前后必须有空白字符 (一)使用test命令 [[email protected] ~]# type test test is a shell b

shell脚本批量测试可访问的URL+业务名字

url shell脚本,新手写的,请多多指点 情况介绍 公司需要,测试url能不能访问,写一个shell脚本,几百个url不知道那个哪些可以访问,哪些不可以访问,把不能访问的url过滤掉,输出可以访问的url,url对应业务名字 1,新建一个文本,存放url的网站 [[email protected] sh]# cat url.txt  运维博客 http://www.021soso.com 运维假站 http://www.021soso.cn 云盘搜索 http://pan.yunpanos.

shell脚本的测试与判断的基础实施

一.条件测试:判断条件是否成立 1.条件测试的类型:文件测试:整数比较:字符串比较:逻辑测试 2.条件测试的语法:[ 操作符  条件表达式]等于 test  操作符  条件表达式 3.文件测试: 1)文件的类型:-(普通文件),d(里面),c(字符设备),s(套接字).b(块设备).p(管道文件,可以用于屏幕演示) 2)文件判断符:-f  文件,-d目录,-e文件是否存在,-rwx判断是否有权限  [操作符  文件] 4.整数比较 1)语法:[ 数字1   操作符  数字2] 2)操作符:-eq

shell中条件测试

bash脚本中条件测试类型:整数测试 字符串测试 文件测试 条件测试的表达式:[ expression ] [ [ expression ] ]表达式的前后必须有空格 整数测试:-eq:测试两整数是否相等,相等为真 -ne:测试两整数是否不等,不等为真 -ge:测试一个数是否大于或等于另一个数 -le:..............小于或等于....... -gt: ..............大于.......... -lt: ...............小于.......... bash中命