首页 理论教育 学会在Linux中使用Shell编程技巧

学会在Linux中使用Shell编程技巧

时间:2023-11-18 理论教育 版权反馈
【摘要】:两个字符串之间的关系运算有等于、不等于、大于和小于,单个的字符串有两种判断:空与非空,见表5-2。表5-2 字符串关系运算注意,表5-2中的运算符=,!在Bash2以上的版本,判断两个字符串是否相等用一个等号或者两个等号都可以。3个空格被代入,命令变成test -z"",系统认为-z的后面有3个实实在在的空格,str被认为是非空的,退出状态为1,这才是对的:所以,在写脚本的时候要特别注意,对字符串的判断尽可能带上双引号。

学会在Linux中使用Shell编程技巧

两个字符串之间的关系运算有等于、不等于、大于和小于,单个的字符串有两种判断:空与非空,见表5-2。

表5-2 字符串关系运算

978-7-111-48202-4-Chapter05-6.jpg

注意,表5-2中的运算符=,!=,>和<的两边必须有空格。在Bash2以上的版本,判断两个字符串是否相等用一个等号或者两个等号都可以。较老的Bash版本,必须用两个等号。现在,很难遇到安装了Bash2以下版本的Linux操作系统,所以不必考虑使用一个还是两个等号。但是可以相信,习惯使用C语言的人肯定喜欢使用两个等号。

例如,给name赋值为Mike,则$name=Mike是成立的,$name!=Mike是不成立的:

978-7-111-48202-4-Chapter05-7.jpg

如果给name赋值为空格加Mike,看看会怎样:

978-7-111-48202-4-Chapter05-8.jpg

运行[$name=Mike]时,$name被替换为空格加Mike,相当于左中括号后面多了一个空格,命令变为[Mike=Mike]。系统认为该命令在比较Mike与Mike是否相等,当然相等,命令的退出状态为0。这恐怕不是想得到的结果。

紧接着,运行["$name"=Mike],$name两边加上了引号,系统认为该命令是比较空格加Mike与Mike是否相等,当然是不相等的,命令的退出状态为1:

978-7-111-48202-4-Chapter05-9.jpg

看来用不用引号,有时效果是不一样的,这一点需要注意。

表5-2中有字符串大小比较。按照字典顺序,排在后面的大,排在前面的小。比较的时候需要注意,由于>与<在命令行里表示重定向,所以使用大、小于号的时候,要在前面加上反斜杠屏蔽其特定含义。按照字典顺序,dog排在spring的前面,“dog小于spring”是成立的:

978-7-111-48202-4-Chapter05-10.jpg

按照字典顺序,apple排在banana的前面,“apple大于banana”是不成立的:

978-7-111-48202-4-Chapter05-11.jpg

下面给str赋值为abc,“字符串str为非空”是成立的:

978-7-111-48202-4-Chapter05-12.jpg(www.xing528.com)

下面给str赋值为空(两个紧挨着的单引号,中间没有空格,表示空),“字符串str非空”是不成立的:

978-7-111-48202-4-Chapter05-13.jpg

“字符串str为空”是成立的:

978-7-111-48202-4-Chapter05-14.jpg

978-7-111-48202-4-Chapter05-15.jpg

下面将str赋值为3个空格(两个单引号之间有3个空格),那么str是非空的。运行test -z $str,来测试str是否为空。3个空格被代入,命令变成test-z,与命令test -z效果一样,系统认为-z的后面没有东西,str被认为是空的,退出状态为0,这显然不对:

978-7-111-48202-4-Chapter05-16.jpg

再运行test -z"$str",来测试str是否为空。3个空格被代入,命令变成test -z"",系统认为-z的后面有3个实实在在的空格,str被认为是非空的,退出状态为1,这才是对的:

978-7-111-48202-4-Chapter05-17.jpg

所以,在写脚本的时候要特别注意,对字符串的判断尽可能带上双引号。

在对变量进行比较的时候,根据“语境”,有时变量会变为字符串,有时会变为整数。下面给str赋值为56,按照字典顺序,字符串“56”排在字符串“8”前面,“字符串56小于字符串8”是成立的:

978-7-111-48202-4-Chapter05-18.jpg

把str与整数相比较时,str根据自己所处的环境,像变色龙一样,马上变成了整数56,整数56大于整数8,即56-gt8是成立的:

978-7-111-48202-4-Chapter05-19.jpg

将一个纯字符串与整数相比,肯定是不合理的,比较时会遇到提示:

978-7-111-48202-4-Chapter05-20.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈