zoukankan      html  css  js  c++  java
  • shell语法 07-shell if条件测试和比较

    if条件测试常用的语法

    • test <测试表达式>
    • [ <测试表达式> ]
    • [[ <测试表达式> ]]
    • ((<测试表达式>))

    test命令和[]测试操作符

    • test <测试表达式>
    • [ <测试表达式> ]

    (这两种语法是等价的)

    测试操作符 全拼 说明
    -d directory 文件存在且为目录
    -f file 文件存在且为普通文件
    -e exist 文件存在
    -r read 文件存在且可读
    -s size 文件存在且文件大小不为0
    -w write 文件存在且可写
    -x exexutable 文件存在且可执行
    -L link 文件存在且为链接文件
    f1 -nt f2 newer than 文件f1比文件f2新
    f1 -ot f2 olderthan 文件f1比文件f2旧
    -n not zero 字符串的长度不为0
    -z zero 字符串的长度为0
    s1 = s2 字符串1等于字符串2
    s1 != s2 字符串1不等于字符串2
    -eq equal 相等
    -ne not equal 不相等
    -gt greater than 大于
    -ge greater equal 大于等于
    -lt less than 小于
    -le less equal 小于等于
    -a and
    -o or
    ! not

    范例:

    test -f /data/test.sh && echo true || echo false
    [ -f /data/test.sh ] && echo true || echo false
    
    • 用[]测试变量时,如果被测试的变量不加双引号,那么测试结果可能会是不正确的:
    file1=/etc/passwd
    [ -f "$file1" ] && echo 1 || echo 0
    
    如果是文件实体路径,那么加引号与不加引号的结果是一样的:
    [ -f "/etc/passwd" ] && echo 1 || echo 0
    [ -f /etc/passwd ] && echo 1 || echo 0
    

    [[]]测试操作符

    • [[ <测试表达式> ]]
    在[[]]中可以使用通配符等进行模式匹配
    [[ ! $a =~ [1-3] ]] && echo 1 || echo 0
    
    测试操作符 全拼 说明
    -d directory 文件存在且为目录
    -f file 文件存在且为普通文件
    -e exist 文件存在
    -r read 文件存在且可读
    -s size 文件存在且文件大小不为0
    -w write 文件存在且可写
    -x exexutable 文件存在且可执行
    -L link 文件存在且为链接文件
    f1 -nt f2 newer than 文件f1比文件f2新
    f1 -ot f2 olderthan 文件f1比文件f2旧
    -n not zero 字符串的长度不为0
    -z zero 字符串的长度为0
    s1 = s2 字符串1等于字符串2
    s1 != s2 字符串1不等于字符串2
    ==/= equal 相等
    != not equal 不相等

    | greater than | 大于
    -ge | greater equal | 大于等于
    < | less than | 小于
    -le | less equal | 小于等于
    && | and | 与
    || | or | 或
    ! | not | 非


    (())测试操作符

    • ((<测试表达式>))
      • 常用与计算
      • 对于整数的关系运算,也可以使用Shell的算术运算符(())
    ((3>2)) && echo 1 || echo 0
    ((3!=2&&5==5)) && echo 1 || echo 0
    
  • 相关阅读:
    移动端工作心得
    小程序初探
    你可能会用到的"奇技赢巧"
    一个知乎日报pwa
    Progressive Web Applications
    Java中的基本数据类型以及装箱、拆箱
    用sql获得指定记录的空段数目和字段名称--实在想不通,这种场景应用在哪
    putIfAbsent,一个字段为空的话,将该字段设置为指定值
    PO、VO、BO、POJO、DAO、DTO都是什么对象
    Java中字符串连接符(+)和append的区别
  • 原文地址:https://www.cnblogs.com/liangjingfu/p/9419493.html
Copyright © 2011-2022 走看看