shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果。
一、逻辑运算符
逻辑卷标
表示意思
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 的意思
运算符号
代表意义
=
等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
!=
不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
<
小于 应用于:整型比较 在[] 中,不能使用 表示字符串
>
大于 应用于:整型比较 在[] 中,不能使用 表示字符串
-eq
等于 应用于:整型比较
-ne
不等于 应用于:整型比较
-lt
小于 应用于:整型比较
-gt
大于 应用于:整型比较
-le
小于或等于 应用于:整型比较
-ge
大于或等于 应用于:整型比较
-a
双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o
单方成立(or) 逻辑表达式 –o 逻辑表达式
-z
空字符串
-n
非空字符串
二、逻辑表达式
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
注意:所有字符 与逻辑运算符直接用“空格”分开,不能连到一起。
精简表达式
[] 表达式
[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 `]'
注意:在[] 表达式中,常见的>,运算符,还有逻辑运算符|| && 它需要用-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
注意:[[]] 运算符只是[]运算符的扩充。能够支持符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符:|| &&
三、性能比较
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的兼容的情况下,用[[]]是兼容性强,而且性能比较快,在做条件运算时候,可以使用该运算符。
Linux shell tr 命令详解
该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...
(转)linux shell 数字计算详解
代码中免不了要进行各种数据计算.抛开科学计算不提,普通的计算占地,百分比,同比,环比等需求就很常见.linux shell中进行数字计算,主要有如下几种方式: 1.bc bc是比较常用的linux计算 ...
Linux shell sed 命令详解
详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...
Linux shell join命令详解
Linux join命令 2012-02-09 17:49:00| 分类: SHELL | 标签:linux join 文件连接 |字号 订阅join命令 功能:“将两个文件里指定栏位同样的行连接起来 ...
linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )
在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略 ...
linux shell 字符串操作详解(获取长度、查找,替换)
在做shell批处理程序时候,常常会涉及到字符串相关操作.有许多命令语句,如:awk,sed都能够做字符串各种操作. 事实上shell内置一系列操作符号,能够达到相似效果,大家知道,使用内部操作符会省 ...
linux shell ansible 命令详解
也可以参考ansible 模块介绍的其他文章:https://www.cnblogs.com/guxiaobei/p/8316903.html 安装ansible yum install epel-r ...
linux shell seq命令详解
seq: squeue 是一个序列的缩写,主要用来输出序列化的东西 seq常见命令参数 用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 ...
Linux shell cut 命令详解
详细资料请参考:博客园骏马金龙 https://www.cnblogs.com/f-ck-need-u/p/7521357.html cut命令将行按指定的分隔符分割成多列,它的弱点在于不好处理多个分 ...
Linux Shell系列教程之(八)Shell printf命令详解
本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...
随机推荐
android 获取Datepicker日期
1.使用的Android5.0系统,实现上面效果使用了alertdialog 2.布局文件: layout_dataselect <?xml version="1.0" en ...
jquery更改Reaper某一列的值
一.实现效果:通过Jquery实现点击repeater中的按钮循环修改快递专线的线路状态 1.初始效果图 2.点击关闭专线按钮之后的效果图 二.MVC模式实现上述效果 SQLServerDAL层 #r ...
Java 泛型 Java使用泛型的意义
Java 泛型 Java使用泛型的意义 @author ixenos 直接意义 在编译时保证类型安全 根本意义 a) 类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板 b) 使用复用性 ...
git使用教程及github远程仓库管理
git使用教程步骤 1.安装git 安装完后,在开始菜单里找到"git"->"Git Bash",蹦出一个类似命令行窗口,说明安装成功.2 注册git 在 ...
PE解析器的编写(一)——总体说明
之前自己学习了PE文件的格式,后来自己写了个PE文件的解析器,这段时间工作上刚好要用到它,老板需要能查看某个exe中加载的dll的一个工具,我在使用之前自己写的这个东西的时候,发现很多东西都忘记了,所 ...
Windows下SQLMAP的安装图解
第一步:BurpSuite扫描工具安装 //来源:http://www.mamicode.com/info-detail-563355.html Burp Suite 是用于渗透测试web 应用程序的 ...
python中的基础2
2 2.1 字符串的索引与切片: a = 'ABCDEFGHIJK' print(a[0]) print(a[3]) print(a[5]) print(a[7]) 2.2 字符串的常用方法. pr ...
uboot使用笔记
一.从最基础的uboot开始 首先是打算直接用程序把已有的镜像烧写进去sd卡里面,但是问题来了,烧写不进去 原因: 可能是windows 7的某些版本和win⑩的系统为了保护磁盘,设定了保护等级,直接 ...
【BZOJ4503】两个串(FFT)
[BZOJ4503]两个串(FFT) 题面 给定串\(S\),以及带通配符的串\(T\),询问\(T\)在\(S\)中出现了几次.并且输出对应的位置. \(|S|,|T|<=10^5\),字符集 ...
KVM虚拟化技术(四)安装虚拟机
一.首先用比较简单的virt-manager来安装 # virt-manager 后面就是一般的安装系统流程了,这里不再复述 二.用virt-install命令行来安装 还是通过本地IOS文件来进行安 ...