zoukankan      html  css  js  c++  java
  • 自学Linux Shell12.2-test命令

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

    12.2-test命令

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

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

    1.  test命令

    格式:

    1 test condition

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

    第一种:

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

    第二种:

    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 字符串 字符串的长度不为零则为真
    < 检查前面的字符串是否比后面的小
    > 检查前面的字符串是否比后面的大

    字符串相等性:

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

     

    字符串顺序: 

     注意问题:

    • 大于号和小于号必须转义
    • 大于和小于顺序和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 使用双括号 

    双括号的命令格式如下: 

    1 ((expression))

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

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

    4.2 使用双方括号 

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

    1 [[expression]]

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

     

  • 相关阅读:
    Rstudio代码的快捷键
    sqlhelper帮助类
    图片上传
    反射获取 obj类 的属性 与对应值
    jquery 操作 动态创建的 元素
    Path类使用
    jquery 小数计算保持精度
    js字符串转成数字
    DateTime.Now.ToString()的各种字符串
    Linq语句 动态组建
  • 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9209772.html
Copyright © 2011-2022 走看看