谈一谈关于shell编程中的字符串比较的两种方式
Shell编程有时处理一个对象时,需要我们对对象进行测试。
只有符合要求的才采取下一步操作,这样做的好处可以避免程序出错。
这个测试的对象可以是文件、字符串、数字等等。
下面我们来简单的看一下对于字符串比较。
1、 字符串比较方式一
格式1:
[ 字符串1 操作符 字符串2 ]
操作符:
=
!=
格式2:
[ 参数 字符串 ]
参数:
-z:字符串内容为空
-n:字符串内容非空
案例:
//定义两个变量
str1="string1"
str2="string2"
//比较两个字符串是否相等
[ "${str1}" = "${str2}" ] && echo "yes" || echo "no"
no
//比较两个字符串是否不相等
[ "${str1}" != "${str2}" ] && echo "yes" || echo "no"
yes
//判断字符串是否为空
[ -z "${str1}" ] && echo "yes" || echo "no"
no
//判断字符串是否不为空
[ -n "${str1}" ] && echo "yes" || echo "no"
yes
提示:
"${str1}" = "${str2}"中的变量要加上"",防止出现为空命令报错

2、 字符串比较方式二
格式:
[[ 字符串1 操作符 字符串2 ]]
案例:
//定义一个变量a
a="123 456"
//使用方式一"${a}"没有问题
[ "${a}" = "123 456" ] && echo "yes" || echo "no"
yes
//使用方式一${a}不加引号出现错误
[ ${a} = "123 456" ] && echo "yes" || echo "no"
bash: [: too many arguments
no
//使用方式二${a}没有问题
[[ ${a} = "123 456" ]] && echo "yes" || echo "no"
yes

通过方式一和方式二的对比
方式二可以解决变量中a="123 456"带空格的问题
当然方式一通过加双引号也是可以解决
方式一是一个比较传统的方法,至于方式一二的使用
根据自己的需求进行选择
补充:
方式二中可以使用通配符
[odysee@kingdom shellFiles]$ str="123"
[odysee@kingdom shellFiles]$ [[ ${str} = ??? ]] && echo "yes" || echo "no"
yes
[odysee@kingdom shellFiles]$ [[ ${str} = ?? ]] && echo "yes" || echo "no"
no
[odysee@kingdom shellFiles]$ [[ ${str} = * ]] && echo "yes" || echo "no"
yes

欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。