shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别
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的区别的更多相关文章
- [转] shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别
[From] https://www.cnblogs.com/tony1314/p/8315666.html 1. 关于文件和目录 -f 判断某普通文件是否存在 -d 判断某目录是否存在 -b ...
- 一文搞懂List 、List<Object>、List<?>的区别以及<? extends T>与<? super T>的区别
前段时间看<Java编程思想>泛型时对 <? extends T>与<? super T>很懵逼,接着看到泛型与集合的更蒙蔽,随后又翻开<码出高效>时, ...
- linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别
一.单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题. 因为空格在Linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错.为了避免 ...
- linux shell中单引号、双引号、反引号、反斜杠的区别
摘自http://www.jb51.net/article/33495.htm 1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg 403-212- ...
- Shell中单引号、双引号、反引号、反斜杠的区别
1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg -- Susan Topple -- 如果我们想查找的是Susan Goldberg,不能直接使 ...
- Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别
虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,谈谈加载图片的时候怎么处理大图片的,outmemoryExceptionBitmapFactory.option 垃圾回收,没有引用的对 ...
- Kafka Shell基本命令(包括topic的增删改查)
转载请注明出处:http://www.cnblogs.com/xiaodf/ 创建kafka topic 查看所有topic列表 查看指定topic信息 控制台向topic生产数据 控制台消费topi ...
- shell中定义变量用双引号和单引号以及不用引号的区别
1. 单引号 使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出 2. 双引号 如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双 ...
- Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...
随机推荐
- makefile中打印变量名字,方便调试
$(warning $(DVD_SERVICE)) // DVD_SerVICE是Makefile中的变量 $(warning ST40_IMPORTS is $(ST40_IMPORTS)) 变 ...
- 20164304姜奥——Exp1 PC平台逆向破解
1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,ge ...
- 8Linux磁盘划分、RAID
磁盘划分fdisk 1.磁盘分区 fdisk 2.格式化 mkfs.ext4 mkfs.xfs 3.挂载 mount 路径 挂载路径 fdisk命令中的参数以及作用 参数 作用m 查看全部可用的参数n ...
- 目标检测faster rcnn error == cudaSuccess (2 vs. 0) out of memory
想尝试 更深更强的网络,或者自己写了一个费显存的层,发现1080 ti的11G显存不够用了,老师报显存不够怎么办? Check failed: error == cudaSuccess (2 vs. ...
- Unable to docker login through CLI - unauthorized: incorrect username or password
Unable to docker login through CLI - unauthorized: incorrect username or password To solve it proper ...
- python中线程2
cpython中的GIL和pool GIL锁(全局解释器锁) 1.what? GIL是全局解释器锁,和普通锁加在数据上不同的是:GIL加在加在解释器上,是为了防止多个线程在同一时间执行python字节 ...
- PostgreSQL在windows 10上的下载和安装
一.下载 PostgreSQL Windows版本下载地址: https://www.postgresql.org/download/windows/ 下载地址包含2个版本,根据个人喜好下载即可: 1 ...
- CSS预处器的了解
到目前为止,在众多优秀的CSS预处理器语言中就属Sass.LESS和Stylus最优秀,讨论的也多,对比的也多. 1.Sass背景介绍 Sass是对CSS(层叠样式表)的语法的一种扩充,诞生于2007 ...
- 关于SQL 导出脚本失败 及SQL 的重装
说点题外话 最近跳到一家新公司 薪资比较客观 但是技术可能不太尽如人意 而且对.Net方向的开发好像不是很友好 自己也不知道该怎么办 一个人大老远跑这边来 附近也没有什么.net的公司和职位 房子租 ...
- Vue-Router导航守卫:
有的时候,我们需要通过路由来进行一些操作,比如最常见的登录权限验证,当用户满足条件时,才让其进入导航,否则就取消跳转,并跳到登录页面让其登录. 为此我们有很多种方法可以植入路由的导航过程:全局的, 单 ...