字符串比较

比较运算符

比较运算符是比较值并返回true或false的运算符。 在比较Bash中的字符串时,您可以使用以下运算符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# - 相等运算符,如果字符串相等,则返回true。将=运算符与test [命令一起使用。将==运算符与[[模式匹配命令]一起使用。
`string1 = string2`
`string1 == string2`
# - 不等式运算符,如果字符串不相等,则返回true
`string1 != string2`
#- 正则表达式运算符,如果左边字符串数与右侧的扩展正则表达式匹配,则返回true
`string1 =~ regex `
# - 大于运算符,按字典顺序(字母顺序)排序,如果左边字符串大于右边字符串,则返回true
`string1 > string2`
# - 小于运算符,按字典顺序(字母顺序)排序,如果右边边字符串大于左边字符串,则返回true
`string1 < string2`
# - 如果字符串长度为零,则为True。
`-z string`
# - 如果字符串长度不为零,则为True。
`-n string`

注意点:

  • 必须在二元运算符和操作数之间使用空格。
  • 始终在变量名称周围使用双引号以避免任何单词拆分或通配问题。
  • Bash不按“类型”隔离变量,变量根据上下文被视为整数或字符串。

    检查两个字符串是否相等

    在大多数情况下,在比较字符串时,您需要检查字符串是否相等。
  • test [命令检查字符串是否与=运算符相等:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash

    VAR1="Linux.com"
    VAR2="Linux.com"

    if [ "$VAR1" = "$VAR2" ]; then
    echo "字符串是相等的。"
    else
    echo "字符串是不相等的。"
    fi
    执行脚本时,它将打印:字符串是相等的
  • 使用[[command and == operator]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash

    read -p "请输入第一个字符串: " VAR1
    read -p "请输入第二个字符串: " VAR2

    if [[ "$VAR1" == "$VAR2" ]]; then
    echo "字符串是相等的。"
    else
    echo "字符串是不相等的。"
    fi
    运行脚本并在提示时输入字符串:
    请输入第一个字符串: www.linux.com
    请输入第二个字符串: linux.com
    字符串是不相等的。
  • 使用逻辑和&&和或|| 比较字符串:
    1
    [[ "string1" == "string2" ]] && echo "linux.com" || echo "linux"

    检查String是否包含子字符串

  • 星号符号*来环绕子串(匹配所有字符)
    1
    2
    3
    4
    5
    6
    #!/bin/bash

    VAR='GNU/Linux 是一个操作系统'
    if [[ $VAR == *"Linux"* ]]; then
    echo "它在那里。"
    fi
  • 正则表达式运算符=〜
    1
    2
    3
    4
    5
    6
    #!/bin/bash

    VAR='GNU/Linux 是一个操作系统'
    if [[ $VAR =~ .*Linux.* ]]; then
    echo "它在那里。"
    fi

    检查String是否为空

    可以使用-n和-z运算符来完成此操作
    1
    2
    3
    4
    5
    6
    #!/bin/bash

    VAR=''
    if [[ -z $VAR ]]; then
    echo "字符串为空。"
    fi
    输出:字符串为空
    1
    2
    3
    4
    5
    6
    #!/bin/bash

    VAR=='linux.com'
    if [[ -n $VAR ]]; then
    echo "字符串不为空。"
    fi
    输出:字符串不为空。

    使用ase操作符比较字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash

    VAR="Arch Linux"

    case $VAR in

    "Arch Linux")
    echo -n -e "Linux 匹配\n"
    ;;
    [Fedora](https://www.linux.com/topicnews.aspx?tid=5) | [CentOS](https://www.linux.com/topicnews.aspx?tid=14))
    echo -n "[Red Hat](https://www.linux.com/topicnews.aspx?tid=10)"
    ;;
    esac
    输出:Linux 匹配

    字典比较

    词法比较是通过从左到右顺序比较字符串中的字符,按字母顺序比较两个字符串的操作。这种比较很少使用。
    下面的脚本从词汇上比较了两个字符串:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #! /bin/bash
    value1=linux
    value2=linux.com
    if [ $value1 \> $value2 ]
    then
    echo "$value1 大于 $value2"
    elif [ $value1 \< $value2 ]
    then
    echo "$value1 小于 $value2"
    else
    echo "$value1 等于 $value2"
    fi
    该脚本将输出以下内容:linux 小于 linux.com