14.1.3 字符串测试

Shell中的字符串比较主要有等于、不等于、大于、小于、是否为空等测试,如表14-2所示。

表14-2 字符串测试符

14.1.3 字符串测试 - 图1

下面演示了上述6个字符串测试符的用法,其中对str1的测试使用test方式,对str2的测试使用[]方式。


#

定义空字符串str1

[root@localhost ~]# str1=""

#

测试str1

是否为空,为空则返回0

[root@localhost ~]# test -z "$str1"

[root@localhost ~]# echo $?

0

#

测试str1

是否非空,非空则返回0

,为空返回非0

,此处返回1

[root@localhost ~]# test -n "$str1"

[root@localhost ~]# echo $?

1

#

定义非空字符串str2

,值为hello

[root@localhost ~]# str2="hello"

#

测试str2

是否为空,为空返回0

,不为空返回非0

,此处返回1

[root@localhost ~]# [ -z "$str2" ]

[root@localhost ~]# echo $?

1

#

测试str2

是否非空,非空返回0

[root@localhost ~]# [ -n "$str2" ]

[root@localhost ~]# echo $?

0

#

比较str1

和str2

是否相同,相同则返回0

,否则返回非0

,此处返回1

[root@localhost ~]# [ "$str1" = "$str2" ]

[root@localhost ~]# echo $?

1

#

比较str1

和str2

是否不同,不同则返回0

[root@localhost ~]# [ "$str1" != "$str2" ]

[root@localhost ~]# echo $?

0

#

比较str1

和str1

的大小,需要注意的是,>

和<

都需要进行转义

[root@localhost ~]# [ "$str1" \> "$str2" ]

[root@localhost ~]# echo $?

1

[root@localhost ~]# [ "$str1" \< "$str2" ]

[root@localhost ~]# echo $?

0

#

如果不想用转义符,则可以用[[]]

括起表达式

[root@localhost ~]# [[ "$str1" > "$str2" ]]

[root@localhost ~]# echo $?

1

[root@localhost ~]# [[ "$str1" < "$str2" ]]

[root@localhost ~]# echo $?

0