与其他编程语言类似,bash中的字符串是一种保存字符序列的数据类型。在本教程中,您将学习如何使用下面讨论的各种比较运算符来比较bash字符串。首先,让我们看一个创建和运行bash脚本的示例。创建文件linuxmi.sh,在文件中写入如下代码。#!/bin/bashgreetings="Linuxfanwww.linuxmi.com"echo$greetings输出如下:Linuxfanwww.linuxmi.com注意:脚本中第一行叫做shebang,是绝对路径bash解释器。Bash字符串比较运算符本节介绍用于比较bash字符串的各种比较运算符。比较的结果是真还是假。string1=string2:单个等号运算符=,检查string1和string2是否相等。例如,如果两个字符串包含相同的文本,OK!比较返回真。使用=,操作数被包裹在[]中。string1==string2:双等号运算符,==也检查两个字符串是否相等。在这里,操作数被包裹在[[]]中。string1!=string2:不等式运算符,!=检查string1是否不等于string2。如果它们不相等,则返回true。string1>string2:大于运算符>检查左边的字符串是否大于右边的字符串。字符串之间的比较是基于它们的字母表。string1或小于<运算符在bash中执行两个字符串的字典顺序比较。按字典顺序,大写字母大于小写字母。在相同的情况下,按字母顺序比较两个字符串。字符串之间的比较是从左到右进行的。看看下面的实际实现来理解这个概念。#!/bin/bash#Linux粉丝www.linuxmi.comcar1="Lamborghini"car2="Audi"if[["$car1">"$car2"]];然后echo"${car1}大于${car2}."elif[["$car1"<"$car2"]];thenecho"${car2}isgreaterthan${car1}."elseecho"Boththecarsareequal"fi在上面的例子中,对包含值Lamborghini和Audi的字符串car1和car2进行比较。从字典序上看,L被认为大于A,A是每个字符串的第一个字母。这是因为Unicode字符L(U+004C)比A(U+0041)大。因此,兰博基尼被评价为比奥迪大。检查字符串是否为空您可以使用-n或-z运算符来检查字符串是否为空。一个例子如下所示。#!/bin/bash#Linuxfanswww.linuxmi.comname=""address="linuxmi.com"if[[-z$name]];然后回显“字符串:名称为空。”fiif[[-z$地址]];然后回显“字符串:地址不为空。”elseecho"addressis${address}"在上面的演示中,两个字符串之一为空。当$name为空时,-z$name表达式返回true。因此,将执行if块。此外,表达式-z$address返回false,因为$address不为空。结果,else块被执行。对于类似的场景,您也可以使用-n运算符。#!/bin/bash#Linux粉丝www.linuxmi.comname="LinuxMi"job=""if[[-n$name]];thenecho"String:nameisnotempty,thevalueis${name}"fiif[[-n$job]];然后回显“字符串:作业不为空。“elseecho”字符串:作业为空。"fi上面的例子说明-nstring在字符串不为空时返回true。因此,检查name字符串时执行if块。检查空字符串作业时,返回false,执行else块。要检查字符串是否包含子字符串,可以使用正则表达式运算符,=~来检查字符串是否包含子字符串。运算符的左侧包含字符串,右侧包含要检查的子字符串。一个简单的示例如下所示。#!/bin/bash#Linuxfanswww.linuxmi.comday='今天是星期一!'if[[$day=~Monday]];thenecho"substringfound."elseecho"未找到子字符串。"fiif[[$day=~Sunday]];thenecho"寻找子串。"elseecho"未找到子字符串。"fi在上面的示例中,字符串是TodayisMonday!。根据字符串检查星期日和星期一这两个子字符串。由于字符串包含星期一,因此当它的计算结果为真时执行此if块。对于星期日,它不会存在于字符串中。结果,比较导致执行false和else块。结论在本教程中,您学习了一些常见的bash字符串比较运算符。最后,您学习了如何使用这些运算符来比较不同的bash场景中提供的字符串。