• shell中的条件判断


    【原文链接】shell中的条件判断

    1 基本语法

    [ condition ] 这里需要注意的是condition前后要有一个空格,条件非空即为true,比如 [ xxx ] 返回true,[] 则返回 false

    2 常用判断条件

    (1) 两个整数之间比较

    • = 字符串比较
    • -lt 小于
    • -le 小于等于
    • -eq 等于
    • -gt 大于等于
    • -ne 不等于

    (2) 按照文件权限进行判断

    • -r 有读的权限(read)
    • -w 有写的权限(write)
    • -x 有执行权限(execute)
      (3) 按照文件类型进行判断
    • -f 文件存在并且是一个常规的文件
    • -e 文件存在
    • -d 文件存在并是一个目录

    3 条件判断使用举例

    (1) 比较两个数的大小,如下,当返回值为0为true,否则当返回值为1则为false,此外,当放括号与数字之间必须要有空格

    # 条件两边没有空格会报错
    $ [3 -gt 2]
    -bash: [3: command not found
    
    # 条件 3大于2
    $ [ 3 -gt 2 ]
    # 打印上一条命令返回码
    $ echo $?
    0
    
    # 作为字符串比较 3等于2
    $ [ 3 = 2 ]
    # 打印上一条语句返回码
    $ echo $?
    1
    
    # 比较 3小于2
    $ [ 3 -lt 2 ]
    # 打印上一条语句返回码
    $ echo $?
    1
    
    # 比较,3不等于2
    $ [ 3 -ne 2 ]
    # 打印上一条语句返回码
    $ echo $?
    0
    
    # 比较 3等于2
    $ [ 3 -eq 3 ]
    # 打印上一条语句返回码
    $ echo $?
    0
    $
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    (2) 判断文件是否存在以及类型

    $ mkdir demo
    $ ls
    demo  test.sh
    
    # 判断 test.sh为文件
    $ [ -f test.sh ]
    $ echo $?
    0
    
    # 判断demo为目录
    $ [ -d demo ]
    $ echo $?
    0
    
    # 判断test.sh为目录
    $ [ -d test.sh ]
    $ echo $?
    1
    
    # 判断demo为文件
    $ [ -f demo ]
    $ echo $?
    1
    
    # 判断test.sh存在
    $ [ -e test.sh ]
    $ echo $?
    0
    
    # 判断demo存在
    $ [ -e demo ]
    $ echo $?
    0
    
    # 判断hahaha存在
    $ [ -e hahahaha ]
    $ echo $?
    1
    $
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    (3) 判断文件权限的条件,如下

    $ ls -l
    total 4
    drwxrwxr-x. 2 honghua honghua  6 Jul  7 13:23 demo
    -rw-rw-r--. 1 honghua honghua 21 Jul  6 16:52 test.sh
    
    # 判断test.sh有读权限
    $ [ -r test.sh ]
    $ echo $?
    0
    
    # 判断demo有写的权限
    $ [ -w demo ]
    $ echo $?
    0
    
    # 判断test.sh有可执行权限
    $ [ -x test.sh ]
    $ echo $?
    1
    
    # 判断demo有可执行权限
    $ [ -x demo ]
    $ echo $?
    0
    $
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    4 多条条件判断语句的逻辑关系

    • && 表示前一条命令执行成功时,才执行后一条命令,如果前一条命令失败了,则不会执行后一条命令
    • || 表示上一条命令执行失败时,才执行下一条命令,如果前一条命令成功了,则不会执行后一套命令

    如下,其中test.sh为文件,demo为目录

    # 首先判断3大于2,为True,继续判断test.sh存在,也为True,因此返回码为0
    $ [ 3 -gt 2 ] && [ -f test.sh ]
    $ echo $?
    0
    
    # 首先判断test.sh存在,为True,然后判断test.sh拥有可执行权限,为False,因此返回码为1
    $ [ -e test.sh ] && [ -x test.sh ]
    $ echo $?
    1
    
    # 首先判断test.sh是目录,为False,因为逻辑为或,所以继续判断demo是目录,为True,所以返回码为0
    $ [ -d test.sh ] || [ -d demo ]
    $ echo $?
    0
    $
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    如何系统设计、分析和优化传递函数(399.94 s)/(0.0000000007 s^2 + 0.000014*s + 1)
    Go runtime 调度器精讲(五):调度策略
    HTTP协议中的Cookie 和 Session
    激励合作伙伴的8个想法
    单元测试界的高富帅Pytest框架,手把手教学,从入门到精通
    C语言结构体实战---处理学生信息
    【LeetCode】戳气球 [H](记忆化搜索)
    Linux下查找当前目录下所有文件中的关键字AAA并将其替换成BBB
    苹果智能戒指再曝光,或将配合头显来应用,支持无线充电
    单片机采集传感器数据(整形,浮点型)modbus上传
  • 原文地址:https://blog.csdn.net/redrose2100/article/details/127898703