点击返回 自学Linux命令行与Shell脚本之路

12.2-test命令

if-then语句不能测试命令退出状态码之外的条件,test命令提供了在if-then语句中测试不同条件的途径。

  • 如果test命令中列出的条件成立,test命令就会退出并返回状态码0
  • 如果test命令中列出的条件不成立,test命令就会退出并返回非0的退出状态码,这使得if-thon语句不会在执行

1.  test命令

格式:

 test condition

condition是test命令要测试的一系列参数和值。当用在if-then语句中时,test命令如下两种表示方法:

第一种:

 if test condition
then
command
fi
  • 如果不写test命令的condition部分,以非0的退出状态码退出,并执行else语句块
  • 如果加入一个条件时,test会测试该条件
    如果test命令中列出的条件成立,test命令就会退出并返回状态码0
    如果test命令中列出的条件不成立,test命令就会退出并返回非0的退出状态码,这使得if-thon语句不会在执行

第二种:

 if [condition]
then
command
fi
  • 第一个方括号和第二个方括号之前必须加上一个空格,否则会报错

2.  test命令的3类判断条件

  • 数值比较 
  • 字符串比较 
  • 文件比较

2.1 数值比较(最常见)

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

但是涉及到浮点值时,数值条件测试会有一个限制。bash shell只能处理整数。

2.2 字符串比较

参数 说明
= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真
< 检查前面的字符串是否比后面的小
> 检查前面的字符串是否比后面的大

字符串相等性:

在比较两个字符串的相等性时,比较测试会将所有的标点和大小写情况都考虑在内。

字符串顺序:

注意问题:

  • 大于号和小于号必须转义
  • 大于和小于顺序和sort命令采用的不同
    比较测试中使用标准的ASCII顺序,根据每个字符的ASCII数值来决定排序结果
    sort命令使用的是系统本地化语言设置中定义的排序顺序,对于英语,排序中小写字母出现在大写字母前面

2.3 文件比较

参数 说明
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧

举例1:

上面代码使用了-d测试条件来检查用户的$HOME目录是否存在。如果它存在的话,它将继续使用cd命令来切到$HOME目录并进行显示目录下的文件。

举例2:

-e比较允许你在脚本中使用对象前检查文件或目录对象是否存在,然后上面代码表示若不存在创建一个新文件testing

举例3:

-e比较适用于文件和目录。但要确定指定的对象是个文件,必须用-f比较

3. 复合条件测试

if-then语句允许使用布尔逻辑来组合测试。有两种布尔运算符可用:

  • [ condition1 ]&&[ condition1 ] 必须都满足 
  • [ condition1 ] || [ condition1 ] 满足一种即可

if-then语句允许使用布尔逻辑来组合测试。有两种布尔运算符可用:

以上解释如下,如果var1、var2同时满足大于15,输出$$;如果var1、var2有一个满足大于15,输出||;否则输出not

4 . if-then的高级特性

  • 用于数学表达式的双括号 ((expression))
  • 用于高级字符串处理功能的双方括号 [[ expression ]]

4.1 使用双括号

双括号的命令格式如下:

((expression))

expression可以是任意的数学赋值或比较表达式。

  • 在双括号结构中,所有表达式可以像c语言一样,如:a++,b–等。
  • 在双括号结构中,所有变量可以不加入:“$”符号前缀。
  • 双括号可以进行逻辑运算,四则运算
  • 双括号结构 扩展了for,while,if条件测试运算
  • 支持多个表达式运算,各个表达式之间用“,”分开
  • 不需要将双括号中表达式里的判断符号转义

4.2 使用双方括号

双方括号的命令格式如下:

1 [[expression]]

expression使用了test命令中采用的标准字符串比较。

自学Linux Shell12.2-test命令的更多相关文章

  1. 自学Linux Shell12.1-结构化命令if-then

    点击返回 自学Linux命令行与Shell脚本之路 12.1-结构化命令if-then 许多程序要求对shell脚本中的命令施加一些逻辑流程控制.有一类命令会根据条件使脚本跳过某些命令.这样的命令通常 ...

  2. 自学Linux Shell12.3-case命令

    点击返回 自学Linux命令行与Shell脚本之路 12.3-case命令 有了case命令,就不需要写出所有elif语句来不停的检查同一个变量的值了.case命令会采用列表格式来检查单个变量的多个值 ...

  3. 自学Linux Shell12.4-for命令

    点击返回 自学Linux命令行与Shell脚本之路 12.4-for命令 1. for命令 格式一 for var in list do commands done 格式二 for var in li ...

  4. 自学Linux Shell12.5-while、until命令

    点击返回 自学Linux命令行与Shell脚本之路 12.5-while.until命令 until 循环与 while 循环在处理方式上刚好相反. while循环用于不断执行一系列命令,也用于从输入 ...

  5. 自学Linux Shell12.6-嵌套循环for命令

    点击返回 自学Linux命令行与Shell脚本之路 12.6-嵌套循环for命令 嵌套循环就是在一个循环中还有一个循环. 内部循环在外部循环体中,在外部循环的每次执行过程中都会触发内部循环,直到内部循 ...

  6. 自学Linux Shell12.7-控制循环break、continue命令

    点击返回 自学Linux命令行与Shell脚本之路 12.7-控制循环break.continue命令 break命令.break命令用于跳出循环,使用break可以跳出任何类型的循环:for.whi ...

  7. 自学Linux Shell3.1-帮助命令man

    点击返回 自学Linux命令行与Shell脚本之路 3.1-帮助命令man 1.man命令概述 默认bash shell提示符是美元符号($),这个符号表明shell在等待用户输入. Linux ma ...

  8. 自学Linux Shell3.3-列表命令ls

    点击返回 自学Linux命令行与Shell脚本之路 3.3-列表命令ls ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名. ...

  9. 自学Linux Shell12.8-循环实例

    点击返回 自学Linux命令行与Shell脚本之路 12.8-循环实例 待定. 3 fi bash shell的if语句会运行if后面的那个命令. 如果该命令的退出状态码是0 (该命令成功运行),位于 ...

随机推荐

  1. LOJ2687 BOI2013 Vim 线头DP

    传送门 多图警告!!! 一种很新奇的\(DP\),全网似乎只有一两篇题解-- 首先,序列中的一段\(e\)等价于在跳的过程中这一段\(e\)之后的一个字符必须要经过,并且在最后的答案中加上$2 \ti ...

  2. NOIp2018停课刷题记录

    Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...

  3. 【php增删改查实例】第二十一节 - 用户修改功能

    19.1 添加用户修改的按钮 打开userManage.html,找到新增按钮的地方: 我们不难发现,编辑按钮就差不多应该在新建用户的右边. 那么,假如我现在是新人,对这个项目本身就不太熟悉,那么我得 ...

  4. Spring Cloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus

    在本教程第三讲Spring Cloud 入门教程(三): 配置自动刷新中,通过POST方式向客户端发送/refresh请求, 可以让客户端获取到配置的最新变化.但试想一下, 在分布式系统中,如果存在很 ...

  5. Excel 中批量处理数据(改成 json 格式)

    如下excel: 需要处理成下面的效果: 方法: 在 C2 中输入公式: ="{"""&"code"&"" ...

  6. svg矢量图在flex布局中样式扭曲的问题

    问题机型 小米5 华为nova 其他未知的可能机型 问题描述 利用flex 布局的一行中, 左一样式: -webkit-box-flex: 0; flex: 0 1 auto; 左二样式: -webk ...

  7. Python-元组-10

    元祖 Why:对于容器型数据类型list,无论谁都可以对其增删改查,那么有一些重要的数据放在list中是不安全的,所以需要一种容器类的数据类型存放重要的数据,创建之初只能查看而不能增删改,这种数据类型 ...

  8. junit-test

    一.题目简介: 用单元测试junit4测试calculator类的加减乘除四种方法,来初步学习junit4的学习方法. 二.源码的github链接  :https://github.com/weare ...

  9. jisuanqi

    1.jisuanqi 2.https://github.com/12wangmin/text/tree/master 3.计算截图 7+8 清除 4.总结 通过课程设计,主要要达到两个目的,一是检验和 ...

  10. 男神女神配——alpha阶段总结

    一.需求分析 虽然公共社交网络系统能够满足大多数高校校园用户在校园网络社交的需求,但是针对校园学习.工作和文化生活等方面的支持以及学校个性化需求方面却存在不足.利用电子校务平台的数据,设计了与真实校园 ...