• linux shell bash 比较操作


    整数比较
    -eq 等于,如:if [ "$a" -eq "$b" ]
    -ne 不等于,如:if [ "$a" -ne "$b" ]
    -gt 大于,如:if [ "$a" -gt "$b" ]
    -ge 大于等于,如:if [ "$a" -ge "$b" ]
    -lt 小于,如:if [ "$a" -lt "$b" ]
    -le 小于等于,如:if [ "$a" -le "$b" ]
     
    < 小于(需要双括号),如:(("$a" < "$b"))
    <= 小于等于(需要双括号),如:(("$a" <= "$b"))
    > 大于(需要双括号),如:(("$a" > "$b"))
    >= 大于等于(需要双括号),如:(("$a" >= "$b"))
     
    字符串比较
     
    = 等于,如:if [ "$a" = "$b" ]
    == 等于,如:if [ "$a" == "$b" ],与=等价
     
    注意: [[]]和[]中的行为在某些情况下是不同的:
     
    [[ $a == z* ]]           # 如果$a 以"z"开头(模式匹配)那么将为true
    [[ $a == "z*" ]]         # 如果$a 等于z*  (字符匹配),那么结果为true
     
    [ $a == z* ]             # File globbing 和word splitting 将会发生
    [ "$a" == "z*" ]        # 如果$a 等于z* (字符匹配),那么结果为true
     
    File globbing 是一种关于文件的速记法,比如"*.c"就是,再如~也是.
    但是file globbing 并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
    (笔者不太懂, 假如在/tmp目录下有一个a.txt文件,则[ "a.txt" = a.* ]会返回逻辑真,但如果/tmp下有a.txt和a.out两个文件,则这样写Shell会报错)
     
    != 不等于,如:if [ "$a" != "$b" ]
    注意:!= 在[[]]结构中使用模式匹配.
     
    < 小于,在ASCII 字母顺序下.如:
    if [[ "$a" < "$b" ]]
    if [ "$a" \< "$b" ]
    注意:在[]结构中"<"需要被转义.
     
    > 大于,在ASCII 字母顺序下.如:
    if [[ "$a" > "$b" ]]
    if [ "$a" \> "$b" ]
    注意:在[]结构中">"需要被转义.
     
    -z 字符串为空.就是长度为0.
    -n 字符串不为空
    注意: 对于字符串或数字的比较, 加上双引号("")是没有坏处的, 而且能避免一些不必要的麻烦(请参考,但模式和正则表达式不能加双引号.
     
     
    混合比较
    -a 逻辑与
    exp1 -a exp2     如果exp1 和exp2 都为true 的话,这个表达式将返回true
    -o 逻辑或
    exp1 -o exp2    如果exp1 和exp2 中有一个为true 的话,那么这个表达式就返回true
     
    但在[[]]使用&&和|| 代替-a 和-o,  -o 和-a 一般都是搭配test 命令或者[]
     
    看一些例子:
    01
    #!/bin/bash
    02
    # 数字和字符串比较
    03
     
    04
    # 这里的变量a 和b 既可以当作整型也可以当作是字符串.
    05
    # 因为Bash 变量并不是强类型的.
    06
    a=4
    07
    b=5
    08
    # a,b作为整数进行比较
    09
    if [ "$a" -ne "$b" ]
    10
    then
    11
        echo "$a is not equal to $b"
    12
        echo "(arithmetic comparison)"
    13
    fi
    14
    echo
    15
    # a,b作为字符串进行比较
    16
    if [ "$a" != "$b" ]
    17
    then
    18
         echo "$a is not equal to $b."
    19
         echo "(string comparison)"
    20
    fi
    21
     
    22
    # 在这个特定的例子中,"-ne"和"!="都可以.
    23
     
    24
    exit 0
     
     
    01
    #!/bin/bash
    02
    # 测试字符串是否为null
    03
    # $string1 没被声明和初始化
    04
    if [ -n $string1 ]
    05
    then
    06
        echo "String \"string1\" is not null."
    07
    else
    08
        echo "String \"string1\" is null."
    09
    fi
    10
    # 错误的结果.
    11
    # 显示$string1 为非空,虽然他没被初始化.
    12
     
    13
    echo
    14
     
    15
    # 给$string1加上双引号再试一下.
    16
    if [ -n "$string1" ]
    17
    then
    18
        echo "String \"string1\" is not null."
    19
    else
    20
        echo "String \"string1\" is null."
    21
    fi
    22
    # 这次输出我们预期的结果
    23
     
    24
    echo
    25
     
    26
    if [ $string1 ] # 这次$string1 变成"裸体"的了,相当于[ -n $string1 ]
    27
    then
    28
        echo "String \"string1\" is not null."
    29
    else
    30
        echo "String \"string1\" is null."
    31
    fi
    32
     
    33
    string1=initialized
    34
    if [ $string1 ] # 再来
    35
    then
    36
        echo "String \"string1\" is not null."
    37
    else
    38
        echo "String \"string1\" is null."
    39
    fi
    40
    # 这次输出我们期望的结果
    41
     
    42
    # 但最好还是给字符串加上双引号"", 因为这可以避免不必要的麻烦,也是一种好习惯

  • 相关阅读:
    删除ubuntu多余内核
    Linux从入门到精通(第8章--磁盘管理)
    图书销售管理系统概要设计,系统数据结构设计分工
    图书管理销售系统,出错设计部分
    图书管理销售系统概要分析,接口设计部分
    图书管理销售系统,运行设计部分
    图书管理销售管理系统,总体设计部分
    图书销售管理概要分析报告,引言部分
    图书销售管理系统概要分析报告总体分工
    图书销售管理系统需求分析,各种功能图部分
  • 原文地址:https://www.cnblogs.com/mfryf/p/2604762.html
Copyright © 2020-2023  润新知