在编写 Bash 脚本时,您经常需要比较两个字符串以检查它们是否相等。当两个字符串具有相同的长度并且包含相同的字符序列时,它们相等。
本教程介绍如何在 Bash 中比较字符串。
比较运算符#
比较运算符是比较值并返回 true 或 false 的运算符。在 Bash 中比较字符串时,可以使用以下运算符:
-
string1 = string2
and string1 == string2
- The equality operator returns true if the operands are equal.
- Use the
=
运算符与test
[
命令。
- Use the
==
运算符与[[
模式匹配命令。
-
string1 != string2
- 如果操作数不相等,则不等运算符返回 true。
-
string1 =~ regex
- 如果左侧操作数与右侧的扩展正则表达式匹配,则正则表达式运算符返回 true。
-
string1 > string2
- 如果左操作数大于按字典顺序(字母顺序)排序的右操作数,则大于运算符返回 true。
-
string1 < string2
- 如果右操作数大于按字典顺序(字母顺序)排序的右操作数,则小于运算符返回 true。
-
-z string
- 如果字符串长度为零,则为 True。
-
-n string
- 如果字符串长度非零,则为 True。
比较字符串时需要注意以下几点:
- 二元运算符和操作数之间必须使用空格。
- 始终在变量名称周围使用双引号以避免任何分词或通配符问题。
- Bash 不按“类型”分隔变量,变量根据上下文被视为整数或字符串。
检查两个字符串是否相等#
在大多数情况下,在比较字符串时,您需要检查字符串是否相等。
以下脚本使用if 语句和测试[
命令检查字符串是否与=
操作员:
#!/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 or ||
比较字符串:
[[ "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
该脚本将echo下列:
It's there.
另一种选择是使用正则表达式运算符=~
如下所示:
#!/bin/bash
VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
echo "It's there."
fi
句点后跟星号.*
匹配除换行符之外的任何字符零次或多次出现。
检查字符串是否为空#
很多时候,您还需要检查变量是否为空字符串。您可以使用-n
and -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 运算符比较字符串#
除了使用测试运算符之外,您还可以使用案例陈述比较字符串:
#!/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" < "$VAR2" ]]; then
echo "${VAR2} is lexicographically greater than ${VAR1}."
else
echo "Strings are equal"
fi
该脚本将输出以下内容:
Ubuntu is lexicographically greater than Linuxize.
结论#
比较字符串是 Bash 脚本中最基本、最常用的操作之一。阅读本教程后,您应该很好地了解如何在 Bash 中比较字符串。您还可以查看我们的指南字符串连接
.
如果您有任何问题或反馈,请随时发表评论。