Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux shell 逻辑运算符、逻辑表达式详解

Linux shell 逻辑运算符、逻辑表达式详解

作者头像
小小科
修改于 2020-08-17 10:08:23
修改于 2020-08-17 10:08:23
1.8K0
举报
文章被收录于专栏:北京马哥教育北京马哥教育

shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果。

一、逻辑运算符

1、逻辑卷标表示意思

1)关于档案与目录的侦测逻辑卷标

-f 常用!侦测『档案』是否存在 eg: if [ -f filename ]

-d 常用!侦测『目录』是否存在

-b 侦测是否为一个『 block 档案』

-c 侦测是否为一个『 character 档案』

-S 侦测是否为一个『 socket 标签档案』

-L 侦测是否为一个『 symbolic link 的档案』

-e 侦测『某个东西』是否存在!

2)关于程序的逻辑卷标

-G 侦测是否由 GID 所执行的程序所拥有

-O 侦测是否由 UID 所执行的程序所拥有

-p 侦测是否为程序间传送信息的 name pipe 或是 FIFO (老实说,这个不太懂!)

3)关于档案的属性侦测

-r 侦测是否为可读的属性

-w 侦测是否为可以写入的属性

-x 侦测是否为可执行的属性

-s 侦测是否为『非空白档案』

-u 侦测是否具有『 SUID 』的属性

-g 侦测是否具有『 SGID 』的属性

-k 侦测是否具有『 sticky bit 』的属性

4)两个档案之间的判断与比较 ;例如[ test file1 -nt file2 ]

-nt 第一个档案比第二个档案新

-ot 第一个档案比第二个档案旧

-ef 第一个档案与第二个档案为同一个档案( link 之类的档案)

5)逻辑的『和(and)』『或(or)』

&& 逻辑的 AND 的意思

|| 逻辑的 OR 的意思

2、运算符号 代表意义

= 等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串

!=不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串

< 小于 应用于:整型比较 在[] 中,不能使用 表示字符串

> 大于 应用于:整型比较 在[] 中,不能使用 表示字符串

-eq 等于 应用于:整型比较

-ne 不等于 应用于:整型比较

-lt 小于 应用于:整型比较

-gt 大于 应用于:整型比较

-le 小于或等于 应用于:整型比较

-ge 大于或等于 应用于:整型比较

-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式

-o 单方成立(or) 逻辑表达式 –o 逻辑表达式

-z 空字符串

-n 非空字符串

二、逻辑表达式

1、test 命令

使用方法:test EXPRESSION

如:

[root@localhost ~]# test 1 = 1 && echo ‘ok’

ok

[root@localhost ~]# test -d /etc/ && echo ‘ok’

ok

[root@localhost ~]# test 1 -eq 1 && echo ‘ok’

ok

[root@localhost ~]# if test 1 = 1 ; then echo ‘ok’; fi

ok

注意:所有字符 与逻辑运算符直接用“空格”分开,不能连到一起。

2、精简表达式

[] 表达式

[root@localhost ~]# [ 1 -eq 1 ] && echo ‘ok’

ok

[root@localhost ~]# [ 2 < 1 ] && echo ‘ok’

-bash: 2: No such file or directory

[root@localhost ~]# [ 2 < 1 ] && echo ‘ok’

[root@localhost ~]# [ 2 -gt 1 -a 3 -lt 4 ] && echo ‘ok’

ok

[root@localhost ~]# [ 2 -gt 1 && 3 -lt 4 ] && echo ‘ok’

-bash: [: missing `]’

注意:在[] 表达式中,常见的>,<需要加转义字符,表示字符串大小比较,以acill码 位置作为比较。 不直接支持<>运算符,还有逻辑运算符|| && 它需要用-a[and] –o[or]表示

[[]] 表达式

[root@localhost ~]# [ 1 -eq 1 ] && echo ‘ok’

ok

[root@localhost ~]$ [[ 2 < 3 ]] && echo ‘ok’

ok

[root@localhost ~]$ [[ 2 < 3 && 4 > 5 ]] && echo ‘ok’

ok

注意:[[]] 运算符只是[]运算符的扩充。能够支持<,>符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符:|| &&

3、性能比较

bash的条件表达式中有三个几乎等效的符号和命令:test,[]和[[]]。通常,大家习惯用if [];then这样的形式。而[[]]的出现,根据ABS所说,是为了兼容><之类的运算符。以下是比较它们性能,发现[[]]是最快的。

$ time (for m in {1..100000}; do test -d .;done;)

real 0m0.658s

user 0m0.558s

sys 0m0.100s

$ time (for m in {1..100000}; do [ -d . ];done;)

real 0m0.609s

user 0m0.524s

sys 0m0.085s

$ time (for m in {1..100000}; do [[ -d . ]];done;)

real 0m0.311s

user 0m0.275s

sys 0m0.036s

不考虑对低版本bash和对sh的兼容的情况下,用[[]]是兼容性强,而且性能比较快,在做条件运算时候,可以使用该运算!

文章转载于马哥教育官网!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EasyC++24,逻辑表达式
我们无论是在for循环还是while循环或者是if条件判断当中,都用到了逻辑判断。
玖柒的小窝
2021/11/08
4650
EasyC++24,逻辑表达式
我们无论是在for循环还是while循环或者是if条件判断当中,都用到了逻辑判断。
TechFlow-承志
2022/08/26
3060
5.3 C语言逻辑运算符与表达式
1、有3种逻辑运算符:与(AND),或(OR),非(NOT)。在basic和Pascal等语言可以在程序中直接用and,or,not作为逻辑运算符。在C语言中不能再程序中直接使用,而是用其他符号代替。
小林C语言
2020/12/04
1K0
5.3 C语言逻辑运算符与表达式
【从零学习python 】07.Python运算符详解:赋值、比较和逻辑运算符
注意:赋值运算符是从右往左运算,将等号右边的值赋值给等号左边,所以,等号的左边一定不能是常量或者表达式。
全栈若城
2024/02/29
1640
shell运算详解
四则运算符: + - * \ 【加减乘除】 扩展: % ** 【取余 开方】
星哥玩云
2022/09/15
8640
shell运算详解
Linux Shell基础篇五 - 运算符
可以比较2个变量,变量的类型可以为数字(整数,小数)与字符串。 比较方式 [] 和 [[]]:
兜兜转转
2023/03/08
8320
Linux Shell基础篇五 - 运算符
Java学习之逻辑运算符(&&、||和!)
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。
李小白是一只喵
2022/03/21
1.4K0
Java学习之逻辑运算符(&&、||和!)
逻辑运算符与逻辑表达式
(1) 判断整型变量k的值是否在[0,100]之间,表达式为:k>=0&&k<=100
pigeon
2022/04/11
7210
逻辑运算符与逻辑表达式
PHP- 运算符-逻辑运算符(一)
PHP是一种广泛使用的服务器端脚本语言,可用于Web开发和动态网页创建。在PHP中,逻辑运算符是一种重要的运算符,用于比较和组合表达式中的布尔值。
堕落飞鸟
2023/04/26
7660
Go-运算符-逻辑运算符
Go 中的逻辑运算符用于在逻辑表达式中组合和比较多个条件,例如与、或、非等。本文将介绍 Go 中的逻辑运算符及其使用方法。
堕落飞鸟
2023/04/20
6190
《前端运维》一、Linux基础--05Shell运算符
 今天我们来学习下Shell运算符,Shell跟其他的编程语言一样,也支持多种运算符,包括:
zaking
2022/05/10
3900
《前端运维》一、Linux基础--05Shell运算符
java 关系运算符和逻辑运算符
关系运算符 > ,< ,>=, <=, !=, == 逻辑运算符:与:&& (&),或: ||( |) ,非:! 返回的都是布尔值,java中是没有1和0 来代表true 或false的。
用户7886150
2020/11/26
8130
Shell 基本运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
小小工匠
2021/08/16
7090
Access比较和逻辑运算符
大家好,前面算术运算符的实例,本节介绍比较运算符和逻辑运算符。在查询设计的第三步条件设置中较常用。
无言之月
2020/04/08
1.8K0
Access比较和逻辑运算符
Shell 基本运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
用户5005176
2021/08/07
4160
滚雪球学Java(09):运算符、表达式和语句
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/04/27
1240
滚雪球学Java(09):运算符、表达式和语句
深入了解Python运算符和表达式:从基础到高级
Python运算符和表达式是编程中的核心概念,用于执行各种计算和操作。在本文中,我们将深入介绍Python运算符和表达式的各个方面,包括算术运算符、比较运算符、逻辑运算符、位运算符等,以帮助你更好地理解和应用它们。
海拥
2023/09/19
7730
深入了解Python运算符和表达式:从基础到高级
通俗易懂PHP基础【4-运算符与表达式】
骐骥一跃,不能十步;驽马十驾,功在不舍;锲而舍之,朽木不折;锲而不舍,金石可镂。
Lemon黄
2019/10/08
8900
通俗易懂PHP基础【4-运算符与表达式】
C语言 逻辑量、逻辑运算符和逻辑表达式、if语句和switch语句
1.逻辑量的真假判定──0和非0 C语言用整数"1"表示"逻辑真"、用"0"表示"逻辑假"。但在判断一个数据的"真"或"假"时,却以0和非0为根据:如果为0,则判定为"逻辑假";如果为非0,则判定为"逻辑真"。 例如,假设num=12,则: !num的值=0 ,num>=1 && num<=31的值=1 ,num || num>31的值=1。 2.说明 (1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何类型的数据,如实型、字符型等。 (2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说: 1)对于逻辑与运算,如果第一个操作数被判定为"假",系统不再判定或求解第二操作数。 2)对于逻辑或运算,如果第一个操作数被判定为"真",系统不再判定或求解第二操作数。
吃猫的鱼Code
2023/02/02
7710
3.4 C++逻辑运算和逻辑表达式
C++的逻辑常量只有两个:false和true,逻辑型变量的定义是用bool,bool类型的值只能是true或者false
小林C语言
2020/10/30
8060
相关推荐
EasyC++24,逻辑表达式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档