您的位置:首页 > 运维架构 > Shell

Shell脚本学习之逻辑判断

2015-07-17 10:27 351 查看
Shell脚本的if语句、循环语句中都会有一个逻辑判断式。逻辑判断式用于各种条件的判断,除非程序是流水账,否则是一定会用到逻辑判断的,可见其重要性。

Shell的逻辑判断,我目前所知共有两种:

1、test命令,可以结合命令执行结果变量($?)或者&&以及||来实现不同条件走不同分支

2、[ 条件判断 ],这种方式常用于if语句和while语句中

参数
功能
说明
-e
文件是否存在
对文件类型的判断
test -e file
-f
判断文件名是否存在且为文件
-d
判断文件名是否存在且为目录
-r
判断对该文件是否有“可读”权限
对文件权限的检测
test -r file
-w
判断对该文件是否有“可写”权限
-x
判断对该文件是否有“可执行”权限
-nt
(newer than)判断file1是否比file2新
两个文件之间的比较
test file1 -nt file2
-ot
(older than)判断file1是否比file2旧
-ef
判断file1和file2是否为同一文件
-eq
两数值是否相等(equal)
两个整数之间的比较
test n1 -eq n2
-ne
两数值是否不等(not equal)
-gt
n1大于n2(greater than)
-lt
n1小于n2(less than)
-ge
n1大于等于n2(greater than or equal)
-le
n1小于等于n2(less than or equal)
test -z string
判断字符串是否为空,如果为空,则为true
字符串的判断
对参与判断的字符串,最好加上""",如"$var"这样的格式,不然会产生“参数过多”的错
判断相等的时候,"="和"=="是等效的
test -n string
判断字符串是否为空,如果为空,则返回false
test str1=str2
判断str1是否等于str2,若相等,则返回true
test str1!=str2
判断str1是否不等于str2,若相等,则返回false
-a
两个条件同时成立则为真
test -r file1 -a test -x file2
多重条件的判断
-o
两个条件任意一个成立则为真
test -r file1 -a test -x file2
!
对测试条件结果取反
test ! -x file
这是一些常用的test命令的参数,“[]”的用法与test命令类似,只要去掉test这个命令就行,其余不变。

关于&&和||

这个是用于联合两个命令的,逻辑与(&&)和逻辑或(||),在if和循环的判断式中的意义与C语言中是一样的。

逻辑与:表示两个同时为真,则改表达式为真,否则为假。

逻辑或:表示任意一个为真,则表达式为真,否则为假。

但是在test命令中,这两个操作符的意义有所 不同

命令格式
解释
cmd1 && cmd2若cmd1执行完毕且正确执行($?=0),则开始执行cmd2
若cmd1执行完毕且返回出错($?≠0),则不执行cmd2

cmd1 || cmd2
若cmd1执行完毕且正确执行($?=0),则不执行cmd2
若cmd1执行完毕且返回出错($?≠0),则执行cmd2

如果是多于两个命令的联合,执行结果会不断的往后传,影响后面的判断。同时因为$?只有一个,所以这个影响有个就近原则。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 脚本 linux