Shell脚本中的字符串测试
Posted Bwz_Learning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本中的字符串测试相关的知识,希望对你有一定的参考价值。
作为一个实用的、能解决实际问题的Shell脚本程序,必须能够根据执行过程中的各种实际情况来做出正确的选择。Shell提供了一系列的条件测试来处理程序执行过程中的各种情况,并进一步操作。本节将介绍各种条件测试的基本语法,以及Shell程序的基本流程控制语句判断语句的使用。
条件测试
在Shell程序中,用户可以使用测试语句来测试指定的条件表达式的真或假。当指定的条件为真时,整个条件的测试返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0的数值。 在Shell程序中,条件测试中指定的条件为真时,条件测试的返回值为0,这主要是为了保持与Shell程序的退出状态一致。当某一个Shell程序成功执行时,该进程会返还一个0数值;而如果该程序执行错误,则会返回一个非0数值 。
条件测试的语法主要有两种,分别是test和[命令。
字符串的测试
在Shell中,可以通过5种运算符来对字符串进行操作。如下所示:
string 判断指定的字符串是否为空
string1 = string2 判断连个字符串string1是string2是否相等
string1 != string2 判断连个字符串string1是string2是否不相等
-n string 判断string是否是非空串
-z string 判断string字符串是否是空串
在进行字符串的测试时,用引号将字符串界定起来是一个非常好的习惯。
演示Shell中字符串测试的使用方法
#定义字符串变量
[root@VM_156_149_centos shell]# a="abc"
#使用test命令测试变量$a是否为空串
[root@VM_156_149_centos shell]# test $a
#输出测试结果
[root@VM_156_149_centos shell]# echo $?
#echo $?的输出结果为0,表示变量$a的值不为空
0
#使用test命令测试变量$a是否不为空
[root@VM_156_149_centos shell]# test -n "$a"
#输出测试结果
[root@VM_156_149_centos shell]# echo $?
#echo $?的输出结果为0,表示变量$a为非空串
0
#使用test命令测试变量$a是否为空串
[root@VM_156_149_centos shell]# test -z "$a"
#输出测试结果
[root@VM_156_149_centos shell]# echo $?
#echo $?的输出结果为1,表示变量$a不是空串
1
注意: 在进行变量赋值的时候,等号”=”的左右两边一定不要有空格;否则,Shell会把空格前面的字符串当做Shell命令来解析。
演示Shell中字符串的比较
#定义两个变量
[root@VM_156_149_centos shell]# a="hello"
[root@VM_156_149_centos shell]# b="world"
#比较两个字符串是不是相等
[root@VM_156_149_centos shell]# [ $a = $b ]
# echo $?的返回值为1,表示两个字符串变量不相等
[root@VM_156_149_centos shell]# echo $?
1
#比较两个字符串是不是不相等
[root@VM_156_149_centos shell]# [ $a != $b ]
# echo $?的返回值为0,表示两个字符串变量是不相等
[root@VM_156_149_centos shell]# echo $?
0
初学者容易犯的错误
在Shell脚本中的字符串的比较里面,有一个初学者容易犯的错误。下面进行讲解。观察下面代码的执行结果,
[root@VM_156_149_centos shell]# a="Apple"
[root@VM_156_149_centos shell]# b="Orange"
[root@VM_156_149_centos shell]# test "$a"="$b"
[root@VM_156_149_centos shell]# echo $?
0
从表面上看,这个例子与前面介绍片的几个例子没有太大的区别。其中
a的值为"Apple",变量
b的值是”Orange”。但是,第5行的比较结果为0.我们知道,0意味着这两个字符串的值是相等的。而在第一行和第二行,这两个变量的数值明显是不一样的。那么究竟是哪个地方出了问题那?
实际上问题出在第三行, 根据Shell的要求,运算符的左右两边必须保留空格,而在上面的例子中,表达式被写成了下面的形式:
test "$a"="$b"
在上面的情况下,Shell并不认为其中的”=”是一个字符串的运算符,而是看成一个普通的字符。所以,上面的例子实际上相当于执行下面的字符串测试:
[root@VM_156_149_centos shell]# a="Apple"
[root@VM_156_149_centos shell]# b="Orange"
[root@VM_156_149_centos shell]# test "$a"="$b"
[root@VM_156_149_centos shell]# echo $?
0
也就是说,实际上测试的是字符串是否为空。上面的字符串”Apple=Orange”当然不为空串,所以是上面的测试结果为0.
注意
在字符串的测试运算时,”=”、”!=”,以及”-z”等符号的左右两边,一定含有一个空格。
以上是关于Shell脚本中的字符串测试的主要内容,如果未能解决你的问题,请参考以下文章