[From] https://www.cnblogs.com/tony1314/p/8315666.html

1. 关于文件和目录

-f  判断某普通文件是否存在

-d  判断某目录是否存在

-b  判断某文件是否块设备

-c  判断某文件是否字符设备

-S  判断某文件是否socket(待修正)

-L  判断某文件是否为符号链接(待修正)

-e  判断某东西是否存在(待修正)

-p  判断某文件是否为pipe 或是 FIFO

2. 关于文件的属性

-r  判断文件是否为可读的属性

-w  判断文件是否为可以写入的属性

-x  判断文件是否为可执行的属性

-s  判断文件是否为非空白文件

-u  判断文件是否具有SUID的属性

-g  判断文件是否具有SGID的属性

-k  判断文件是否具有sticky bit的属性

3. 两个文件之间的判断与比较

例如[ test file1 -nt file2 ]

-nt  第一个文件比第二个文件新

-ot  第一个文件比第二个文件旧

-ef  第一个文件与第二个文件为同一个( link 之类的文件)

4. 逻辑的(and)与(or)

&&   逻辑的 AND 的意思, -a 也是这个意思

||  逻辑的 OR 的意思, -o 也是这个意思

5.运算符相关

运算符号代表意义

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

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

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

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

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

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

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

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

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

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

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

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

-z  空字符串

-n  非空字符串

6.1 test 命令

# test 1 = 1 && echo 'ok'

ok

# test -d /etc/ && echo 'ok'

ok

# test 1 -eq 1 && echo 'ok'

ok

# if test 1 = 1 ; then echo 'ok'; fi

ok

注意:所有字符 与逻辑运算符直接用“空格”分开,不能连到一起。test 1=1就是错误的!

6.2 [] 表达式

# [ 1 -eq 1 ] && echo 'ok'

ok

# [ 2 < 1 ] && echo 'ok'

-bash: 2: No such file or directory

# [ 2 \< 1 ] && echo 'ok'

# [ 2 -gt 1 -a 3 -lt 4 ] && echo 'ok'

ok

# [ 2 -gt 1 && 3 -lt 4 ] && echo 'ok'

-bash: [: missing `]'

注意:在[] 表达式中,常见的>, <需要加转义字符,表示字符串大小比较,以acill码 位置作为比较。

不直接支持<, >运算符,还有逻辑运算符|| , && 它需要用-a[and] –o[or]表示

6.3 [[]] 表达式

# [ 1 -eq 1 ] && echo 'ok'

ok

# [[ 2 < 3 ]] && echo 'ok'

ok

#[[ 2 < 3 && 4 > 5 ]] && echo 'ok'

ok

[[ 2 < 3 -a 3 > 4 ]] && echo "ok"

-bash: syntax error in conditional expression

-bash: syntax error near `-a'

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

华丽丽的分割线

**********************************************************************************************************************************************

另外一部份总结:

bash shell中` `与[ ]的区别

一,[[用"&&"而不是"-a"表示逻辑"与",用"||"而不是"-o"表示逻辑"或":

# [[ 1 < 2 && b > a ]] && echo true || echo false

true

# [[ 1 < 2 -a b > a ]] && echo true || echo false

bash: syntax error in conditional expression

bash: syntax error near `-a’

# [ 1 < 2 -a b > a ] && echo true || echo false

true

# [ 1 < 2 && b > a  ]&& echo true || echo false #wrong syntax

bash: [: missing `]‘

false

二,[ ... ]为shell命令,所以在其中的表达式应是它的命令行参数,所以串比较操作符”>” 与”<”必须转义,否则就变成IO改向操作符了。[[中"<"与">"不需转义:

#  [ 2 \< 10 ] && echo true || echo false  #you should use “\<”

false

#[ 2 -lt 10 ] && echo true || echo false

true

#  [[ 2 < 10 ]] && echo true || echo false

false

三,` `.``.``.` `进行算术扩展,而[ ... ]不做。

#  [[ 99+1 -eq 100 ]] && echo true || echo false

true

#  [ 99+1 -eq 100 ] && echo true || echo false

bash: [: 99+1: integer expression expected

false

#  [ $((99+1)) -eq 100 ] && echo true || echo false

true

四,[[]]能用正则,而[]不行

# [ "test.php" == *.php ] && echo true || echo false

false

# [[ "test.php" == *.php ]] && echo true || echo false

true

# [[ "t.php" == [a-z].php ]] && echo true || echo false

true

# [ "test.php" == "*.php" ] && echo true || echo false

false

# [[ "test.php" == "*.php" ]] && echo true || echo false

false

注意:双引号("")的作用

[转] shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别的更多相关文章

  1. shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别

    1. 关于文件和目录 -f  判断某普通文件是否存在 -d  判断某目录是否存在 -b  判断某文件是否块设备 -c  判断某文件是否字符设备 -S  判断某文件是否socket(待修正) -L  判 ...

  2. 一文搞懂List 、List<Object>、List<?>的区别以及<? extends T>与<? super T>的区别

    前段时间看<Java编程思想>泛型时对 <? extends T>与<? super T>很懵逼,接着看到泛型与集合的更蒙蔽,随后又翻开<码出高效>时, ...

  3. linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别

    一.单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题. 因为空格在Linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错.为了避免 ...

  4. linux shell中单引号、双引号、反引号、反斜杠的区别

    摘自http://www.jb51.net/article/33495.htm 1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg 403-212- ...

  5. Shell中单引号、双引号、反引号、反斜杠的区别

    1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg -- Susan Topple -- 如果我们想查找的是Susan Goldberg,不能直接使 ...

  6. Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别

    虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,谈谈加载图片的时候怎么处理大图片的,outmemoryExceptionBitmapFactory.option 垃圾回收,没有引用的对 ...

  7. Kafka Shell基本命令(包括topic的增删改查)

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 创建kafka topic 查看所有topic列表 查看指定topic信息 控制台向topic生产数据 控制台消费topi ...

  8. shell中定义变量用双引号和单引号以及不用引号的区别

    1. 单引号 使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出 2. 双引号 如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双 ...

  9. Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

    Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...

随机推荐

  1. [SoapUI] 设置Excel的第一行为自动过滤

    import org.apache.poi.ss.util.* XSSFWorkbook workbook = new XSSFWorkbook() XSSFSheet sheet = workboo ...

  2. g2o的使用

    相关文献 1.论文 Grisetti, Giorgio, et al. “A tutorial on graph-based SLAM.” IEEE Intelligent Transportatio ...

  3. 实践作业3:白盒测试----总结与反思DAY12.

    ---恢复内容开始--- 阶段一:熟悉白盒测试方法 负责人:刘思佳 工作质量评价:用例设计详细,考虑到白盒测试基于代码,所以尽可能地覆盖更多的白盒测试方法,对系统可能存在的缺陷就更容易了解.对管理员和 ...

  4. windows server2012安装mysql时一直停留在start server的解决方法

    安装的时候,starting server 卡住 原因分析 这个问题小编安装mysql时也碰到过,出现这个问题是my.ini文件没有复制成功了,我们只要在mysql安装目录把把目录中的备份的my-sm ...

  5. 编写高质量代码改善C#程序的157个建议——建议130:以复数命名枚举类型,以单数命名枚举元素

    建议130:以复数命名枚举类型,以单数命名枚举元素 枚举类型应该具有负数形式,它表达的是将一组相关元素组合起来的语义.比如: enum Week { Monday, Tuesday, Wednesda ...

  6. php中this、self、parent解析

    概述: this:指向类当前对象的指针:self:指向类本身,一般指向类中的静态变量:parent:指向父类的指针,一般使用parent来调用父类的构造函数. 下面通过程序详细介绍: 1.this & ...

  7. delphi sqlsever 实现存在则更新,不存在

    (' if exists(select * from NBcommission where Type='''+sType+'''and ItemNo='''+s+''' ) '+ ' begin'+ ...

  8. Delphi xe5如何使用Bluestacks模拟器(用真机或者用猩猩,夜神模拟器,自带的不好用)

    首先,关于这个模拟器问题比较纠结,这是一个关于adb的问题. Delphi XE5会自动识别模拟器和真机,但是你必须先打开模拟器在打开Delphi IDE(Delphi开发环境),否则还得麻烦一会儿. ...

  9. Android-ContentProvider原理图

    ContentProvider的设计思想是模仿了Web里面的架构思想: Web服务器   对外暴露数据(提供被访问的地址Uri,并允许给客户端访问,也可以只让客户端访问某些行为) ContentPro ...

  10. [gcc warnings] -Wtrigraph warnings

    [gcc warnings] -Wtrigraph warnings 背景 三字符组(trigraph)与双字符组(Digraph)是程序设计语言(如C语言)中3个或者2个字符的序列,在编译器预扫描源 ...