14.1.3 字符串测试
Shell中的字符串比较主要有等于、不等于、大于、小于、是否为空等测试,如表14-2所示。
表14-2 字符串测试符
下面演示了上述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