shell脚本的条件测试与比较

发布时间:2020-07-20 01:05:27 作者:warrent
来源:网络 阅读:432

前言:本博文是参考老男孩出版的《shell编程实战》这本文档写的,这是写的非常好的一个文档。

博文大纲:

通常,在bash的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结果执行不同的操作,有时也会与if等条件语句相结合,来完成测试判断,以减少程序运行的错误。

执行条件测试表达式后通常会返回“真”或“假”,就像执行命令后的返回值为0表示真,非0表示假一样。

一、shell脚本的条件测试

在bash编程里,条件测试常用的语法形式如下:

1、test条件测试的简单语法及示例

范例①:

[root@localhost ~]# test  -f file && echo "true" || echo "false"
false

上面语句的意思是如果file文件存在,则输出true,否则(||)输出false。这里的&&表示并且的意思。-f参数用于测试文件是否为普通文件,test命令若执行成功(为真),则执行&&后面的命令,而||后面的命令则是test命令执行失败之后(为假)所执行的命令。

test命令测试表达式的逻辑也可以用上面表达式形式的一半逻辑(即仅有一个&&或||)来测试,示例如下:

[root@localhost ~]# test -f file && echo 1    #若表达式成功,则输出1
1
[root@localhost ~]# test -f file || echo 0    #若表达式不成功,则输出0。
0

在上面的-f选项表示文件存在且为普通文件则表达式成立(我这里没有file这个文件所以不成立)。

逻辑操作符&&和|| 的两端即可以有空格,也可以无空格,这主要是个人的习惯,在尽量减少空格的输入的同时,还要考虑代码的简洁、美观。

在上面的命令中,语法格式如下:
shell脚本的条件测试与比较

关于test测试表达式的更多使用选项,可以执行man test查看帮助。

test命令测试的功能很强大,但是和[ ]、[[ ]]的功能有所重合,因此,在实际工作中选择一种自己喜欢的语法就好(我一般使用“[ ]”测试功能),对于其他的语法,能读懂别人写的脚本就可以了。

2、[ ](中括号)条件测试语法及示例

[ ]条件测试的语法格式为:[ <测试表达式> ]
注意:中括号内部的两端要有空格,[ ]和test等价,即test的所有判断选项都可直接在[ ]里使用。

test条件测试与[ ]中括号条件测试语法的区别:

[root@localhost ~]# test  -f file && echo "true" || echo "false"    #使用test语法
false
[root@localhost ~]# [ -f file ] && echo "true" || echo "false"    #使用[ ]语法
false
[root@localhost ~]# test -f file || echo "false"    #使用test语法
false
[root@localhost ~]# test -f file && echo "true"   #使用test语法
[root@localhost ~]# [ -f file ] && echo "true"   #使用[ ]语法
[root@localhost ~]# [ -f file ] || echo "false"     #使用[ ]语法
false

[ ] 测试语法的格式如下:

shell脚本的条件测试与比较

3、[[ ]]条件测试语法

关于[[ ]]的使用方法和[ ]类似,区别在于[[ ]]的应用属于[ ]的扩展命令,功能给丰富些,如果双中括号里的表达式成立(为真),则执行&&后面的命令,否则执行 || 后面的命令。

在[[]]中可以使用通配符等进行模式匹配;并且&&、||、>、<等操作符可以应用于[[]]中,但不能应用于[]中,在[]中一般使用-a、-o、-gt(用于整数)、-lt(用于整数)等操作符代替上文提到的用于[[]]中的符号。除了使用通配符功能之外,建议放弃这个双中括号的写法,虽然它是较新的test命令的语法格式。

[[ ]]测试语法的格式如下:

shell脚本的条件测试与比较

有关test、[ ]、[[ ]]这些操作符的用法,可以通过help test查询即可得到帮助,完整的[ ]、[[ ]]用法可通过man bash来获取。

二、文件测试表达式

如果在shell编程中要处理一个对象,一般是先对对象进行测试,只有在确定它符合要求时,才应进行操作处理,这样做的好处就是避免程序出错及无谓的系统资源消耗,这个需要测试的对象可以是文件、字符串、数字等。

在编写文件测试表达式时,常用的文件测试操作符如下:

shell脚本的条件测试与比较

上面的这些操作符号对于[[ ]]、[ ]、test的测试表达式是通用的。

注意:测试文件的读、写、执行等属性,不光是根据文件属性rwx的标识来判断,还要看当前执行测试的用户是否真的可以按照对应的权限操作该文件。

如果用来测试一个变量,则被测试的变量需要加双引号将变量引起来,否则可能会出错。如下:

[root@localhost ~]# echo $abc       #确认该变量没有存在

[root@localhost ~]# [ -f $abc ] && echo 1 || echo 0 #不加双引号的话,明明不存在,可照样输出了1
1
[root@localhost ~]# [ -f "$abc" ] && echo 1 || echo 0    #加上双引号就正常了
0

当然,如果是文件的实体路径,那么加引号与不加引号的结果是一样的。

三、字符串测试表达式

字符串测试操作符的作用包括:比较两个字符串是否相同、测试字符串的长度是否为0、字符串是否为NULL等。

常用的字符串测试操作符如下:
shell脚本的条件测试与比较

使用字符测试操作时需要注意以下事项:

四、整数二元比较操作符

shell脚本的条件测试与比较

针对上面符号的特别说明:

使用举例:

[root@localhost ~]# [ 2 > 1 ] && echo 1 || echo 0    #看起来没问题哦,别着急,继续往下看
1
[root@localhost ~]# [ 2 < 1 ] && echo 1 || echo 0    #看吧,命名条件不成立,可还是输出了1
1
[root@localhost ~]# [ 2 \< 1 ] && echo 1 || echo 0     #转义一下再看,OK了。
0
[root@localhost ~]# [ 2 = 1 ] && echo 1 || echo 0    #比较相等符号是正确的
0
[root@localhost ~]# [ 2 = 2 ] && echo 1 || echo 0    #输出正确
1
[root@localhost ~]# [ 2 != 2 ] && echo 1 || echo 0    #输出正确
0

建议在使用中,还是老老实实的对照上表来使用吧,别给自己找麻烦。对于生产环境中的整数比较,推荐使用[ ](类似-eq的用法)。

关于[ ]、[[ ]]、(( ))用法总结:

五、逻辑操作符

常用的逻辑操作符如下:
shell脚本的条件测试与比较

关于上述操作符的具体解释如下:

附加——测试表达式test、[]、[[]]、(())的区别总结

shell脚本的条件测试与比较

———————— 本文至此结束,感谢阅读 ————————

推荐阅读:
  1. Shell测试语句:case条件测试语句
  2. Shell脚本的条件测试和if条件语句使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

shell脚本的条件测试与比较符号 he 条件测试

上一篇:html二级联动学习笔记

下一篇:bootstrap-胶囊式导航内使用徽章

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》