shell脚本条件测试与比较
1、条件测试常用语法
| test 测试表达式 | 利用test命令进行条件测试表达式,test命令与测试表达式之间至少有一个空格 |
| [ 测试表达式 ] | 通过[ ]中括号进行条件测试表达式,[]中括号边界与测试表达式之间至少有一个空格 |
| [[ 测试表达式 ]] | 通过[[ ]]双中括号进行条件测试表达式,[[ ]]双中括号与测试表达式之间至少有一个空格 |
| ((测试表达式)) | 通过(( ))双小括号进行条件测试表达式,( ))双小括号两端不需要空格,常用于整数对比 |
说明:
- 双中括号[[ ]]中可以使用通配符进行匹配,这是其区别于其它几种语法的地方
- &&,||,<,>等操作符可用于双中括号[[ ]]中,但不能应用于[ ]中,在[ ]中一般用-a,-o,-lt,-gt来代替
举例:
test -f /tmp/test.txt && echo || echo
[ -f /tmp/test.txt ] && echo || echo
[[ -f /tmp/test.txt ]] && echo || echo
((>)) && echo || echo 0
2、测试表达式用法
2.1、文件测试表达式
| -d 文件 | 文件存在且为目录则为真 |
| -f 文件 | 文件存在且为普通文件则为真 |
| -e 文件 | 文件存在则为真,不辩别是目录还是文件 |
| -s 文件 | 文件存在且文件大小不为0则为真 |
| -r 文件 | 文件存在且可读则为真,与执行脚本的用户权限也有关 |
| -w 文件 | 文件存在且可写则为真,与执行脚本的用户权限也有关 |
| -x 文件 | 文件存在且可执行则为真,与执行脚本的用户权限也有关 |
| -L 文件 | 文件存在且为链接文件则为真 |
| f1 -nt f2 | 文件f1比文件f2新则为真,根据文件的修改时间计算 |
| f1 -ot f2 | 文件f1比文件f2旧则为真,根据文件的修改时间计算 |
2.2、字符串测试表达式
| -n "字符串" | 若字符串的长度不为0(非空),则为真 |
| -z "字符串" | 若字符串的长度为0,则为真 |
| "串1" = "串2" | 若字符串1等于字符串2则为真,可用"=="代替"=" |
| "串1" != "串2" | 若字符串1不等于字符串2则为真,可用"!=="代替"!=" |
注意:
- 对于字符串的比较,一定要将字符串加比引号后再比较。如[ -n "$string" ]
- =与!=可用于判断两个字符串是否相同
2.3、整数操作符
| 在[]和test中使用 | 在[[ ]]和(( ))中使用 | 说明 |
| -eq | ==或= | 等于,全拼为equal |
| -nq | != | 不等于,全拼为not equal |
| -gt | > | 大于,全拼为greater than |
| -ge | >= | 大于等于,全拼为greater equal |
| -lt | < | 小于,全拼为less than |
| -le | <= | 小于等于,全拼为less equal |
2.4、逻辑操作符
| 在[]和test中使用 | 在[[ ]]和(( ))中使用 | 说明 |
| -a | && | and,与,两端都为真,则结果为真 |
| -o | || | or,或,两端有一个为真,则结果为真 |
| ! | ! | not,非,两端相反,则结果为真 |
2.5、测试表达式的区别总结
| 测试表达式符号 | test | [ ] | [[ ]] | (( )) |
| 边界是否需要空格 | 需要 | 需要 | 需要 | 不需要 |
| 逻辑操作符 | !、-a、 -o | !、-a、 -o | !、&&、|| | !、&&、|| |
| 整数比较操作符 | -eq、-ne、-lt、-gt、-ge、-le | -eq、-ne、-lt、-gt、-ge、-le |
-eq、-ne、-lt、-gt、-ge、-le或 =、!=、<、>、>=、<= |
=、!=、<、>、>=、<= |
| 字符串比较操作符 | =、==、!= | =、==、!= | =、==、!= | =、==、!= |
| 是否支持通配符 | 不支持 | 不支持 | 支持 | 不支持 |
shell脚本条件测试与比较的更多相关文章
- 关于shell脚本——条件测试、if语句、case语句
目录 一.条件测试 1.1.表达说明 1.2.test命令 文件测试 1.3.整数值比较 1.4.字符串比较 1.5.逻辑测试 二.if语句 2.1.单分支结构 2.2.双分支结构 2.3.多分支结构 ...
- 二、shell 脚本条件测试
目录 一.条件测试 test 格式 文件测试 文件测试常见选项 整数值比较 字符串比较 浮点数的运算 逻辑测试 二.if语句 1单分支 2双分支结构 3多分支结构 三元运算符 三.case 一.条件测 ...
- 如何进行shell脚本正确性测试
在实际工作中,需要对shell脚本进行正确性测试. 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严 ...
- Shell编程-条件测试 | 基础篇
什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令.除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux ...
- Linux就该这么学--Shell脚本条件语句(二)
1.for条件语句 先读取多个不同的变量值,然后逐一执行同一组命令. 从列表文件中读取主机地址,逐个测试是否在线. 从ipadds.txt中读取主机地址后赋值给HLIST变量后逐个ping列表中的主机 ...
- Linux就该这么学--Shell脚本条件语句(一)
1.条件测试语句能够让Shell脚本根据实际工作灵活调整工作内容,例如判断系统的状态后执行指定的工作,或创建指定数量的用户,批量修改用户密码,这些都可以让Shell脚本通过条件测试语句完成. if条件 ...
- shell脚本编程测试类型上
一bash的条件测试 判断某需求是否满足,需要由测试机制来实现.专用的测试表达式需要由测试命令辅助完成测试过程. 评估布尔声明,以便用在条件性执行中.若真,则返回0:若假,则返回1. 测试命令:• t ...
- Linux Shell 03 条件测试
条件测试 方式一:在Bash中 test命令和[]是等价的. test命令: if test $n1 -eq $n2 then echo "The two number are equal& ...
- shell脚本条件判断if中-a到-z的意思
[ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则 ...
随机推荐
- 洛谷P1441 砝码称重(搜索,dfs+dp)
洛谷P1441 砝码称重 \(n\) 的范围为 \(n \le 20\) ,\(m\) 的范围为 \(m \le 4\) . 暴力遍历每一种砝码去除情况,共有 \(n^m\) 种情况. 对于剩余砝码求 ...
- Vagrant 入门 - 网络
原文地址 现在,我们启动了 web 服务器,并且通过同步目录使用宿主机上的文件提供服务.然而,还只能通过虚拟机中的终端访问服务器.这一章节中,我们会使用 Vagrant 的网络特性,配置 Vagran ...
- python 微服务方案
介绍 使用python做web开发面临的一个最大的问题就是性能,在解决C10K问题上显的有点吃力.有些异步框架Tornado.Twisted.Gevent 等就是为了解决性能问题.这些框架在性能上有些 ...
- JS DOM元素的操作(创建,添加,删除,和修改属性)
1.1 创建 DOM 元素以及相应的追加方式 1.1.1 创建:document.createElement('div'); 添加: fatherEle.appendChild(ele); appe ...
- 机器学习实战笔记-10-K均值聚类
K-均值聚类 优点:易实现.缺点:可能收敛到局部最小值,大规模数据集上收敛较慢:适用于数值型数据. K-均值聚类(找到给定数据集的k个簇) 算法流程 伪代码: 创建k个点作为起始质心(经常是随机选择) ...
- MapReduce(1): Prepare input for Mappers
According to Wikipedia MapReduce, there are two ways to illustrate MapReduce. One contains three ste ...
- 跨域资源共享(CORS)-漏洞整理
绕过方法整理 绕过 - 仅对域名校验 #POC #"Access-Control-Allow-Origin: https://xx.co & Access-Control-Allow ...
- vuejs基础-style样式
在Vue中使用样式 使用class样式 数组 <h1 :class="['red', 'thin']">这是一个邪恶的H1</h1> 数组中使用三元表达式 ...
- 异步请求jquery action
package com.tarena.action; import java.util.HashMap;import java.util.Map; import javax.annotation.Re ...
- Redis进行数据同步
数据库中的数据一般都涉及到需要对数据进行备份的,这样可以保证数据的安全性,并且如果将一个主设备的数据同步到多个从设备上,允许用户访问数据时可以从多个从设备进行读取, 这样还可以缓解主设备的压力,Red ...