一. 运算符总结说明

1. 条件运算符

运算符号 代表意义 应用 说明
= 等于 整型或字符串比较: str1 = str2 字符串str1 和字符串str2 相等时返回真,如果在[]中,只能是字符串
== 等于 整型或字符串比较: str1 == str2 字符串str1 和字符串str2 相等时返回真,如果在[]中,只能是字符串
!= 不等于 整型或字符串比较: str1 != str2 字符串str1和字符串str2不相等时返回真,如果在[]中,只能是字符串
< 小于 整型或字符串比较: str1 < str2 按字典顺序排序,字符串str1 在字符串str2 之前,在[]中,它表示字符串,如需使用请转义\<
> 大于 整型和字符串比较 在[]中,它表示字符串,如需使用请转义\>
-eq 等于 整型比较: int1 -eq int2 如果int1 等于int2,则返回真
-ne 不等于 整型比较: int1 -ne int2 如果int1 不等于int2,则返回真
-lt 小于 整型比较: int1 -lt int2 如果int1 小于int2,则返回真
-gt 大于 整型比较: int1 -gt int2 如果int1 大于int2,则返回真
-le 小于或等于 整型比较: int1 -le int2 如果int1 小于等于int2,则返回真
-ge 大于或等于 整型比较: int1 -ge int2 如果int1 大于等于int2,则返回真
-z 空字符串 字符串比较: -z string 字符串string 为空串(长度为0)时返回真
-n 非空字符串 字符串比较 :-n string 字符串string 为非空串时返回真

2. 逻辑运算符

运算符号 代表意义 应用 说明
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式 在[] 表达式中使用
-o 单方成立(or) 逻辑表达式 –o 逻辑表达式 在[] 表达式中使用
! 逻辑否,条件为假,结果为真。    
&& 双方都成立(and) 逻辑表达式 && 逻辑表达式 在[[]] 表达式中使用
\ \   单方成立(or)

3. 文件和目录的判断

逻辑符号 代表意义 应用 说明
-f 判断文件是否存在 -f filename 当filename 存在并且是正规文件时返回真
-d 判断目录是否存在 -d pathname 当pathname 存在并且是一个目录时返回真
-b 判断是否为一个【block档案】 -b filename 当filename 存在并且是块文件时返回真(返回0)
-c 判断是否为一个[character档案] -c filename 当filename 存在并且是字符文件时返回真
-S 判断是否为一个[socket 标签档案] -S filename 当filename 存在并且是socket 时返回真
-L 判断是否为一个[symbolic link 的档案] -L filename 当filename 存在并且是符号链接文件时返回真
-e 判断【某个东西】是否存在 -e pathname 当由pathname 指定的文件或目录存在时返回真

4. 程序的逻辑卷标判断

逻辑符号 代表意义 应用 说明
-G 判断是否由 GID 所执行的程序所拥有 -G pathname 当由pathname 存在并且属于当前进程的有效用户id 的用户的用户组时返回真
-O 判断是否由 UID 所执行的程序所拥有 -O pathname 当由pathname 存在并且被当前进程的有效用户id 的用户拥有时返回真(字母O 大写)
-p 判断是否为程序间传送信息的 name pipe 或是 FIFO -p filename 当filename 存在并且是命名管道时返回真

5. 档案的属性判断

逻辑符号 代表意义 应用 说明
-r 判断是否为可读的属性 -r pathname 当由pathname 指定的文件或目录存在并且可读时返回真
-w 判断是否为可以写入的属性 -w pathname 当由pathname 指定的文件或目录存在并且可写时返回真
-x 判断是否为可执行的属性 -x pathname 当由pathname 指定的文件或目录存在并且可执行时返回真
-s 判断是否为『非空白档案』 -s filename 当filename 存在并且文件大小大于0 时返回真
-u 判断是否具有『 SUID 』的属性 -u pathname 当由pathname 指定的文件或目录存在并且设置了SUID 位时返回真
-g 判断是否具有『 SGID 』的属性 -g pathname 当由pathname 指定的文件或目录存在并且设置了SGID 位时返回真
-k 判断是否具有『 sticky bit 』的属性 -k pathname 当由pathname 指定的文件或目录存在并且设置了"粘滞"位时返回真

6.两个档案之间的判断与比较

逻辑符号 代表意义 应用 说明
-nt 第一个档案比第二个档案新 file1 -nt file2 file1 比file2 新时返回真
-ot 第一个档案比第二个档案旧 file1 -ot file2 file1 比file2 旧时返回真
-ef 第一个档案与第二个档案为同一个档案( link 之类的档案) f1 -ef f2 files f1 and f2 are hard links to the same file

二. 逻辑表达式+运算符举例说明

#! bin/bash

echo "========= 逻辑表达式 test ========="
#注意:所有字符与逻辑运算符直接用“空格”分开,不能连到一起。
if test -eq -a == ;then echo "true" ;fi #当3 大于 或 大于 并且 bxp 不等于 bixiaopeng 或 变量website不为空时,为真
if test > -a -gt -a "bxp" != "bixiaopeng" -o -n "$website" ;then echo "true"; else echo "false"; fi #判断文件是否存在
if test -f "/Users/bixiaopeng/justtest.txt" ;then echo "true"; else echo "false"; fi
#判断目录是否存在
if test -d "/Users/bixiaopeng" ;then echo "true"; else echo "false"; fi echo "========= 逻辑表达式 [] =========" #在[] 表达式中,常见的>,<需要加转义字符,表示字符串大小比较,以acill码位置作为比较。
#不直接支持<>运算符,还有逻辑运算符 || 和 && 它需要用-a[and] –o[or]表示。
if [ -eq -a == ];then echo "true" ;fi #当3 大于 或 大于 并且 bxp 不等于 bixiaopeng 或 变量website不为空时,为真
if [ \> -a -gt -a "bxp" != "bixiaopeng" -o -n "$website" ] ;then echo "true"; else echo "false"; fi #判断文件是否存在
if [ -f "/Users/bixiaopeng/justtest.txt" ] ;then echo "true"; else echo "false"; fi
#判断目录是否存在
if [ -d "/Users/bixiaopeng" ] ;then echo "true"; else echo "false"; fi echo "========= 逻辑表达式 [[]] =========" #[[]] 运算符只是[]运算符的扩充。能够支持<,>符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符 || 和 &&
if [[ -eq && == ]];then echo "true" ;fi #当3 大于 或 大于 并且 bxp 不等于 bixiaopeng 或 变量website不为空时,为真
if [[ > && -gt && "bxp" != "bixiaopeng" || -n "$website" ]] ;then echo "true"; else echo "false"; fi #判断文件是否存在
if [[ -f "/Users/bixiaopeng/justtest.txt" ]] ;then echo "true"; else echo "false"; fi
#判断目录是否存在
if [[ -d "/Users/bixiaopeng" ]] ;then echo "true"; else echo "false"; fi #[[]] 中可以使用通配符,不需要引号
[[ $myname = b*peng ]] && echo "true"

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逻辑运算符及表达式的更多相关文章

  1. Linux Shell逻辑运算符和表达式详解

    Shell 逻辑运算符涉及以下几种类型,只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑判断1.关于文件与目录的逻辑判断-f 常用.判断『文件』是否为普通文件,比如: if [ ...

  2. linux shell 逻辑运算符、逻辑表达式详解

    shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑运算符 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测 ...

  3. shell之条件表达式

    conditional expressions are used by the [[ compound command and the test and [ builtin commands. ari ...

  4. linux shell 逻辑运算符、逻辑表达式

    shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决很多复杂的判断. 一.逻辑运算符  逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测『档案』是否存在 e ...

  5. 【转】linux shell 逻辑运算符、逻辑表达式

    shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决很多复杂的判断. 一.逻辑运算符  逻辑卷标表示意思 1.关于档案与目录的侦测逻辑卷标! -f常用!侦测‘档案’是否存在 eg: ...

  6. 【转】linux shell 逻辑运算符、逻辑表达式详解

    shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑运算符 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测 ...

  7. shell 的条件表达式及逻辑操作符简单介绍

    查看系统的shell: cat /etc/shells 文件测试表达式: -f 文件  文件存在且为普通文件则真,即测试表达式成立. -d 文件  文件存在且为目录文件则真,即测试表达式成立. -s ...

  8. Shell中的表达式及IF

    #!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...

  9. shell逻辑运算符

    逻辑运算符 以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 && 逻辑的 AND [[ $a -lt 100 && ...

随机推荐

  1. MySQL-第四篇索引

    1.创建索引的作用 创建索引的唯一作用就是加速对表的查询.索引通过使用快速路径访问方法来快速定位数据,从而减少了磁盘的I/O. 2.索引和表一样也是数据库中的一种对象,但它必须从属于某张表,不能独立存 ...

  2. android 完全退出应用程序(经过严格验证)

    今天解决了如何彻底结束Android应用程序的方法.网上有很多的参考方法,什么finish():android.os.Process.killProcess(android.os.Process.my ...

  3. JVM(8)之 Stop The World

    开发十年,就只剩下这套架构体系了! >>>   小伙伴还记得上一篇中我们留下的一个问题吗?什么是停顿类型!经过前几章的学习,我们知道垃圾回收首先是要经过标记的.对象被标记后就会根据不 ...

  4. Java解析Groovy和Shell的代码

    一.使用场景 在整个系统中,通用型的代码基本没什么变化,需要变动的仅仅是业务相关的代码.那么我们就会把一些业务代码简单编码一下放在数据库中.通过数据库的配置,可以直接从数据库中查找出来编码处理一下,来 ...

  5. XMPP即时通讯协议使用(六)——开发Openfire聊天记录插件

    转载地址:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 开发环境: Sys ...

  6. SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换

    SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换 场景一:表单中的日期字符串和JavaBean的Date类型的转换 在使用SpringMVC的时候,经常会遇到表单中的 ...

  7. AES-OZ745 OZ745 Zynq-7000 开发板与套件

    北京太速科技有限公司为广大合作单位特设海外代购业务,主要包括各类板卡.相机.传感器.仪器仪表.专用芯片等.代购业务仅收取基本的手续费. 北京太速科技有限公司在线客服:QQ:448468544 淘宝网站 ...

  8. 关于如何测试cpu性能的命令操作 linux系统

    for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/d ...

  9. rabbiitmq非阻塞调用

    https://blog.csdn.net/panxianzhan/article/details/50755409 https://blog.csdn.net/u013946356/article/ ...

  10. HTML基础 img标签 做一个图库

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...