Shell
字符串比较
比较运算符
比较运算符是比较值并返回true或false的运算符。 在比较Bash中的字符串时,您可以使用以下运算符:
1 | - 相等运算符,如果字符串相等,则返回true。将=运算符与test [命令一起使用。将==运算符与[[模式匹配命令]一起使用。 |
注意点:
- 必须在二元运算符和操作数之间使用空格。
- 始终在变量名称周围使用双引号以避免任何单词拆分或通配问题。
- 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操作符比较字符串
输出:Linux 匹配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 小于 linux.com1
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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 bq's notes!