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脚本条件测试与比较的更多相关文章

  1. 关于shell脚本——条件测试、if语句、case语句

    目录 一.条件测试 1.1.表达说明 1.2.test命令 文件测试 1.3.整数值比较 1.4.字符串比较 1.5.逻辑测试 二.if语句 2.1.单分支结构 2.2.双分支结构 2.3.多分支结构 ...

  2. 二、shell 脚本条件测试

    目录 一.条件测试 test 格式 文件测试 文件测试常见选项 整数值比较 字符串比较 浮点数的运算 逻辑测试 二.if语句 1单分支 2双分支结构 3多分支结构 三元运算符 三.case 一.条件测 ...

  3. 如何进行shell脚本正确性测试

    在实际工作中,需要对shell脚本进行正确性测试. 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严 ...

  4. Shell编程-条件测试 | 基础篇

    什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令.除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux ...

  5. Linux就该这么学--Shell脚本条件语句(二)

    1.for条件语句 先读取多个不同的变量值,然后逐一执行同一组命令. 从列表文件中读取主机地址,逐个测试是否在线. 从ipadds.txt中读取主机地址后赋值给HLIST变量后逐个ping列表中的主机 ...

  6. Linux就该这么学--Shell脚本条件语句(一)

    1.条件测试语句能够让Shell脚本根据实际工作灵活调整工作内容,例如判断系统的状态后执行指定的工作,或创建指定数量的用户,批量修改用户密码,这些都可以让Shell脚本通过条件测试语句完成. if条件 ...

  7. shell脚本编程测试类型上

    一bash的条件测试 判断某需求是否满足,需要由测试机制来实现.专用的测试表达式需要由测试命令辅助完成测试过程. 评估布尔声明,以便用在条件性执行中.若真,则返回0:若假,则返回1. 测试命令:• t ...

  8. Linux Shell 03 条件测试

    条件测试 方式一:在Bash中 test命令和[]是等价的. test命令: if test $n1 -eq $n2 then echo "The two number are equal& ...

  9. shell脚本条件判断if中-a到-z的意思

    [ -a FILE ]  如果 FILE 存在则为真.  [ -b FILE ]  如果 FILE 存在且是一个块特殊文件则为真.  [ -c FILE ]  如果 FILE 存在且是一个字特殊文件则 ...

随机推荐

  1. kafka 知识点整理

    一个partition只能被同一个消费组内一个消费者消费,所以在同一时间点上,订阅到同一个partition的consumer必然属于不同的Consumer Group. 因此,如果设置的partit ...

  2. Netty精进01

    为什么要学习Netty? 目前基于Netty实现的一些优秀的开源框架:Dubbo.RocketMQ.Spark.Spring5.Flink.ElasticSearch.gRPC……这些还说明不了为什么 ...

  3. 如何获取url里面的参数

    想必大家经常会遇到这样的问题吧,每次获取url参数的时候就一阵头疼,那现在我就教大家一个简单的方法,将url的参数转换成一个对象,用的时候直接用对象点出来就好了.不多说,直接上代码 function ...

  4. python pip报错pip._ vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.

    AttributeError: module 'pip' has no attribute 'main报错 找到安装目录下 helpers/packaging_tool.py文件,找到如下代码: de ...

  5. mybatis多对一

    产品和分类的多对一关系 多个产品属于一个分类 public class Product { private int id; private String name; private float pri ...

  6. 06(H5*)Vue第五天、第六天 Vue常见命令

    常见的Vue命令 全局安装 1:npm i webpack -g   全局安装webpack.   保存到项目中  -S 2:npm i webpack --save-dev  安装到项目依赖中. 3 ...

  7. [Linux] 001 预备知识

    Unix 1965年 MIT,通用电气(GE),AT&T 的贝尔实验室联合开发 项目名称:Multics 目标:开发一种交互式的,具有多道程序处理能力的分时操作系统 后来:贝尔实验室宣布退出 ...

  8. Spring框架中Spring配置文件中<context:annotation-config/>标签说明

    <context:annotation-config/>此标签的重要作用就是: 省去系统繁琐的注解标签,加上一个此标签,就可以在此项目程序添加“注解”的功能,使系统识别相应的注解功能!! ...

  9. MySql-第七篇单表查询

    1.MySQL中可以使用+.-.*./. 1>但MySQL中没有提供字符串连接运算符,可以使用concat(a_str,'xxx')进行连接. 2>在算术表达式中使用null,将会导致整个 ...

  10. 次小生成树(Prim + Kruaskal)

    问题引入: 我们先来回想一下生成树是如何定义的,生成树就是用n - 1条边将图中的所有n个顶点都连通为一个连通分量,这样的边连成子树称为生成树. 最小生成树很明显就是生成树中权值最小的生成树,那么我们 ...