Shell条件测试之字符串比较

1、字符串比较(字符串运算符):

        str1 = str2 : 相等比较

        str1 != str2 : 不等比较

        str1 < str2 : str1小于str2为true,比较字母在字母表顺序,字母越靠后就越大,反之越小

        str1 > str2 : str1大于str2为true,比较字母在字母表顺序,字母越靠后就越大,反之越小

        -n str1 : str1长度不是0则为true

        -z str1 : str1长度为0则为true,-z 是Zero简写

(1) 使用两个字符串直接进行比较

#!/bin/bash

var1="hello"
var2="world"
if [ $var1 = $var2 ];then
	echo "$var1 < $var2"
# 在shell中>或<是输入或输出重定向符号,需要加反斜杠作转义
elif [ $var1 \< $var2 ];then
	echo "$var1 < $var2"
else
	echo "$var1 > $var2"
fi
# 运行结果
~ % sh 06.condition_str_than.sh
hello < world

        注:字符串比较大小,首先会将首个字符转化成ASCII码进行比较大小,如果相同会继续比较第二个字符以此类推,但是需要注意如果是数字类型的字符串如"12",进行比较会出问题,比较数字大小还是使用-gt、-lt等,大小号慎用。

(2) 对字符串作空值比较

#!/bin/bash

str1="love"
str2="    "
# str3未进行定义
str3=
if [ -n $str1 ];then
	echo "$str1 is not null"
else
	echo "$str1 is null"
fi
if [ -n $str2 ];then
	echo "$str2 is not null"
else
	echo "$str2 is null"
fi
if [ -n "$str3" ];then
	echo "$str3 is not null"
else
	echo "$str3 is null"
fi

# 输出结果:
~ % sh 06.condition_str_than.sh
love is not null
     is not null
 is null

(3)Shell中判断条件使用字符串变量时遇到坑

#!/bin/bash

if [ -n $str ];then
	echo "$str is not null"
else
	echo "$str is null"
fi
echo "-----------------------"
if [ -n "$str" ];then
	echo "$str is not null"
else
	echo "$str is null"
fi
 
 # 运行结果
 # 使用-x参数进行调试,显示整个执行过程,查看脚本实际执行命令
 % sh -x 06.condition_str_than.sh  
+ '[' -n ']'
+ echo ' is not null'
 is not null
+ echo ----------------------------------------------
+ '[' -n '' ']'      
+ echo ' is null'
 is null

        条件判断中使用字符串变量不加双引号作为条件,在未定义使用字符串变量时,会默认为空条件就变成“[ -n ]”,-n 就作为字符串处理,最后就变成True,所以运行脚本就会输出" is not null"。

        所以在条件判断中使用字符串变量时,都加上双引号以避免不比较麻烦。

# 直接在终端运行,验证[ -n ]作为条件时输出
~ % if [ -n ];then echo yes;else no;fi
yes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值