Shell脚本学习之逻辑判断

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

判断file1file2是否为同一文件

-eq

两数值是否相等(equal

两个整数之间的比较

test n1 -eq n2

-ne

两数值是否不等(not equal

-gt

n1大于n2greater than

-lt

n1小于n2less than

-ge

n1大于等于n2greater than or equal

-le

n1小于等于n2less 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

如果是多于两个命令的联合,执行结果会不断的往后传,影响后面的判断。同时因为$?只有一个,所以这个影响有个就近原则。

你可能感兴趣的:(linux,shell,脚本)