如何比较Bash中的字符串
时间:2020-03-05 15:31:44 来源:igfitidea点击:
编写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 string'-如果字符串长度为零,则为true。
- '-n string'-如果字符串长度不为零,则为true。
以下是比较字符串时需要注意的几点:
- 在二进制运算符和操作数之间必须使用空格。
- 始终在变量名周围使用双引号,以避免出现单词拆分或者模糊问题。
- Bash不会按“类型”分隔变量,根据上下文将变量视为整数或者字符串。
检查两个字符串是否相等
在大多数情况下,比较字符串时,我们需要检查字符串是否相等。
以下脚本使用if语句和测试'['命令来检查字符串是否与'='运算符相等:
#!/bin/bash VAR1="theitroad" VAR2="theitroad" 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: theitroad Enter second string: Ubuntu Strings are not equal.
我们也可以使用逻辑和'&&'和'或者||比较字符串:
[[ "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='theitroad' 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 "theitroad matched" ;; Fedora | CentOS) echo -n "Red Hat" ;; esac
theitroad matched.
词典比较
词典比较是一种操作,其中通过从左到右顺序比较字符串中的字符,按字母顺序比较两个字符串。
这种比较很少使用。
以下脚本按字典顺序比较了两个字符串:
#!/bin/bash VAR1="theitroad" 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 theitroad.