Categories: Shell编程

Bash中比较字符串

编写Bash脚本时,通常需要比较两个字符串,以检查它们是否相等。当两个字符串长度相同且包含相同的字符序列时,它们是相等的。


比较运算符

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

  • string1=string2和string1==string2——如果操作数相等,则相等运算符返回true。
    • 在test命令中使用=运算符。
    • 在[[命令中使用==运算符进行模式匹配。
  • string1!=string2-如果操作数不相等,则不等式运算符返回true。
  • string1=~regex——如果左操作数与右扩展正则表达式匹配,则regex运算符返回true。
  • string1>string2-如果左操作数大于右操作数,则大于运算符返回true,按字典(字母)顺序排序。
  • string1<string2-如果右操作数大于按字典(字母)顺序排序的右操作数,则小于运算符返回true。
  • -z字符串-如果字符串长度为零,则为True。
  • -n string-如果字符串长度非零,则为True。

以下是比较字符串时需要注意的几点:

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

检查两个字符串是否相等

在大多数情况下,在比较字符串时,您需要检查字符串是否相等。

以下脚本使用if语句和test[命令检查字符串是否与=运算符相等:

#!/bin/bash

VAR1="Linuxize"
VAR2="Linuxize"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

执行脚本时,它将打印以下输出。

Strings are equal.

下面是另一个脚本,它接收用户的输入并比较给定的字符串。在本例中,我们将使用[[命令]和==运算符。

#!/bin/bash

read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

运行脚本并在出现提示时输入字符串:

Enter first string: Linuxize
Enter second string: Ubuntu
Strings are not equal.

您还可以使用逻辑and&&and或| |来比较字符串:

[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"

Not equal

检查字符串是否包含子字符串

有多种方法可以检查字符串是否包含子字符串。

一种方法是使用星号*环绕子字符串,这意味着匹配所有字符。

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
  echo "It's there."
fi

脚本将响应以下内容:

It's there.

另一个选项是使用正则表达式操作符=~如下所示:

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
  echo "It's there."
fi

后跟星号的句号。*匹配除换行符以外的任何字符的零次或多次出现。

检查字符串是否为空

通常,您还需要检查变量是否为空字符串。可以通过使用-n和-z操作符来实现这一点。

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "String is empty."
fi

String is empty.

#!/bin/bash

VAR='Linuxize'
if [[ -n $VAR ]]; then
  echo "String is not empty."
fi

String is not empty.

将字符串与Case运算符进行比较

除了使用测试运算符,还可以使用case语句来比较字符串:

#!/bin/bash

VAR="Arch Linux"

case $VAR in

  "Arch Linux")
    echo -n "Linuxize matched"
    ;;

  Fedora | CentOS)
    echo -n "Red Hat"
    ;;
esac

Linuxize matched.

词典比较

词典比较是一种操作,通过从左到右顺序比较字符串中的字符,按字母顺序比较两个字符串。这种比较很少使用。

以下脚本按字典顺序比较两个字符串:

#!/bin/bash

VAR1="Linuxize"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" 

脚本将输出以下内容:

Ubuntu is lexicographically greater than Linuxize.
5.0
03
在Linux中重命名多个文件
SFTP、FTPS和SCP–有什么区别?
嘻嘻

嘻嘻IT: 笔者是一个工作七八年的程序猿老鸟,从事涉及的技术栈主要包括PHP、Linux、Devops等,喜欢研究新技术,尝试新技术,提升技术自动化和开发效率,致力于write less,do more! 技术每年都会层出不穷,领域划分的越来越细,不可能学习所有的东西,保持对技术的好奇心,理解技术中核心思想,做一个有深度,有思想的开发!

Share
Published by
嘻嘻
Tags: shell

Recent Posts

SEOJuice一款AI内链优化工具

SEOJuice是一款创新的工…

3小时 ago

全球货币导航网页上线了!

o在全球化的今天,货币兑换和国…

13小时 ago

bash字符串拼接

在编程中,字符串的拼接是一个非…

14小时 ago

Bash Case详解

Bash case 语句通常用…

14小时 ago