Linux系统shell程序设计(八)-条件测试(理论+实战)

目录

一、条件测试的基本语法

 二、字符串测试

三、整数测试

四、文件测试

五、逻辑操作符


一、条件测试的基本语法

在shell的各种条件结构和流程控制中都要进行各种测试,然后根据测试结果执行不同的操作,有时也会和if语句相结合,来完成测试判断,以减少程序运行的错误
执行条件测试表达式后通常会返回‘真’或‘假’,就像执行命令后返回布尔值‘0’表示真,非‘0’表示假一样

条件测试语法

说明

语法1test < 表达式 >

这是用test命令进行条件测试的方法。test<表达式>之间至少有一个空格

语法2[ < 表达式 > ]

通过单括号进行条件判断方法。和test命令的方法一样,中括号和内容边界至少有一个空格

语法3[[ < 表达式 > ]]

通过双中括号进行条件判断新方法。双中括号和内容边界至少有一个空格

语法4((< 表达式 >))

通过双小括号进行条件判断方法。一般用于if判断中,双小括号两端不需要空格

test <测试表达式>

  • 如果文件存在,则返回true;如果文件不存在,则返回false
  • 操作符&&和||两端可以有空格,也可以没有空格 
[ <测试表达式> ]

 

  • 如果文件存在,则返回true;如果文件不存在,则返回false
  • []中括号的两端必须有空格,否则会报错。test和[]是等价的
[[ <测试表达式> ]]

  •  如果双中括号表达式为真,则执行&&后面的命令;否则执行||后面的语句
  • 双括号内部的两端必须加空格,否则会报错

双括号和单括号、test语法区别(单括号和test用法相同)

  • 双括号中可以使用通配符进行模式匹配,也可以用&&、||、>、<,但是不能在单括号中使用
  • 单括号中可以使用-o、-gt、-lt等操作符 
[[ <表达式1> && <表达式2> ]]或[[ <表达式1> || <表达式2> ]] 

 二、字符串测试

  • 字符串操作符的作用
比较两个字符串是否相同
字符串长度是否为零
字符串是否为空串

常用字符串操作符

说明

-n "字符串"

如果字符串不为空串,则为真,表达式成立

-z "字符串"

如果字符串为空串,则为真,表达式成立

"字符串1" = "字符串2"

如果字符串1和字符串2相等,则表达式成立。可用==代替=

"字符串1" != "字符串2"

如果字符串1和字符串2不相等,则表达式成立。可用!==代替!=

 字符串测试,一定要把字符串加上双引号,特别是使用[]

判断字符串是否为空,如果不为空则输入true,否则输入false 

[ -n "字符串" ] && echo true || echo false

判断字符串是否为空,如果为空则输入true,否则输入false 

[ -z "字符串" ] && echo true || echo false

 

判断字符串A和字符串B是否相等,如果相等输出true,否则输出false 

[ "字符串A" = "字符串B" ] && echo true || echo false

 判断字符串A和字符串B是否不相等,如果不相等输出true,否则输出false

[ "字符串A" != "字符串B" ] && echo true || echo false

三、整数测试

整数的二元比较

[]test使用的比较符

(())[[]]使用的比较符

说明

-eq

===

相等equal

-ne

!=

不等not equal

-gt

>

大于greater than

-ge

>=

大于等于 greater equal

-lt

<

小于 less than

-le

<=

小于等于less equal

numberA 小于 numberB,如果真输出true,否则输出false 

[ numberA -lt numberB ] && echo true || echo false

numberA 大于等于 numberB,如果真输出true,否则输出false

[ numberA -ge numberB ] && echo true || echo false


numberA 大于 numberB,如果真输出true,否则输出false

[ numberA -gt numberB ] && echo true || echo false

 

四、文件测试

在处理对象时,需要先对对象进行判断,对象符合要求再进行处理,否则操作会出错或消耗一定的资源,测试的对象可以是文件、字符串和数字

常用文件操作符

说明

-d 文件,d全拼为dictionary

文件存在且为目录则为真

-f 文件,f全拼为file

文件存在且为普通文件为真

-e文件,e全拼为exist

文件存在即为真,不判断文件类型是目录还是普通文件

-r文件,r表示read

文件存在且为可读

-s文件,s表示size

文件存在且大小不为0

-w文件,表示write

文件存在且为可写

-x文件,表示executable

文件存在且可执行

-L文件,表示link

文件存在且为链接文件

f1 –nt f2nt表示newer than

文件f1比文件f2

f1 –ot f2nt表示older than

文件f1比文件f2

 判断文件是否存在,如果存在打印0,否则打印1

[ -f file ] && echo 0 || echo 1


判断目录是否存在,如果存在打印0,否则打印1

[ -d dictionary ] && echo 0 || echo 1

判断文件是否可读,如果存在打印0,否则打印1
文件只有读权限

[ -r file ] && echo 0 || echo 1

判断文件是否可写,如果存在且可写打印0,否则打印1
文件只有读权限

[ -w file ] && echo 0 || echo 1

五、逻辑操作符

[]test中使用的操作符

(())[[]]中使用的操作符

说明

-a

&&

and,与关系,表示两边都为真,则结果为真

-o

||

or,或关系,表示两边有一个为真,则为真

not,非,两端相反,则为真

-a表示两边都为真,则结果为真 

[ -f fileA -a -f fileB ]&& echo 0 ||echo 1

-o表示两边有一个为真,则结果为真。文件fileB不存在

[ -f fileA -o -f fileB ]&& echo 0 ||echo 1

在[[]]中&&表示两边都为真,则结果为真

[[ -f fileA && -f fileB ]]&& echo 0 ||echo 1

在[[]]中||表示两边有一个为真,则结果为真。文件fileB不存在

[[ -f fileA || -f fileB ]]&& echo 0 ||echo 1

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术瘾君子1573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值