自学Linux Shell12.2-test命令

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

12.2-test命令

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

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

1.  test命令

格式:express

1 test condition

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

第一种:测试

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

第二种:spa

1 if [condition]
2 then
3     command
4 fi
  • 第一个方括号和第二个方括号以前必须加上一个空格,不然会报错 

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

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

 2.1 数值比较(最多见)

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

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

 2.2 字符串比较

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

 

字符串相等性:3d

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

 

字符串顺序: htm

 注意问题:

  • 大于号和小于号必须转义
  • 大于和小于顺序和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语句容许使用布尔逻辑来组合测试。有两种布尔运算符可用: 

 

以上解释以下,若是var一、var2同时知足大于15,输出$$;若是var一、var2有一个知足大于15,输出||;不然输出not

4 . if-then的高级特性

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

4.1 使用双括号 

双括号的命令格式以下: 

1 ((expression))

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

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

4.2 使用双方括号 

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

1 [[expression]]

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

相关文章
相关标签/搜索