Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)

Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)

In Java

String.compareTo

int     compareTo(String anotherString)
          按字典顺序比较两个字符串。如果返回0,表示相等;<0表示小于;>0 表示大于。

 

int     compareToIgnoreCase(String str)
          不考虑大小写,按字典顺序比较两个字符串。

 

In Bash

判断是否大于(字典顺序)

格式1:[ "$S1" \> "$S2" ]

判断S1是否大于S2,注意转义字符\的使用,否则bash会认为是标准输出重定向。

下面两种写法也是可以的:

格式2:[ "$S1" '>' "$S2" ]

格式3:[ "$S1" ">" "$S2" ]

使用bash关键字[[来判断,不再需要对变量加双引号,也不需要对>进行转义。

格式4:[[ $S1 > $S2 ]]

 

[root@jfht ~]# S1=Hello
[root@jfht ~]# S2=World

[root@jfht ~]# if [ "$S1" \> "$S2" ]; then echo ">"; fi

[root@jfht ~]# [ "$S1" '>' "$S2" ] && echo '>'  
[root@jfht ~]# [ "$S1" ">" "$S2" ] && echo '>' 

[root@jfht ~]# [[ $S1 > $S2 ]] && echo '>'

[root@jfht ~]# [ "$S2" \> "$S1" ] && echo ">"
>
[root@jfht ~]#

 

判断是否小于(字典顺序)

格式1:[ "$S1" \< "$S2" ]

判断S1是否小于S2,注意转义字符\的使用,否则bash会认为是标准输入重定向。

下面两种写法也是可以的:

格式2:[ "$S1" '<' "$S2" ]

格式3:[ "$S1" "<" "$S2" ]

使用bash关键字[[来判断,不再需要对变量加双引号,也不需要对>进行转义。

格式4:[[ $S1 < $S2 ]]

 

 

[root@jfht ~]# S1=Hello
[root@jfht ~]# S2=World

[root@jfht ~]# if [ "$S1" \< "$S2" ]; then echo "<"; fi
<

[root@jfht ~]# [ "$S1" '<' "$S2" ] && echo '<'
<
[root@jfht ~]# [ "$S1" "<" "$S2" ] && echo '<' 
<

[root@jfht ~]# [[ $S1 < $S2 ]] && echo '<'
<

 

判断是否大于等于(不小于)(字典顺序)

在bash中并没有 >= 操作符。

如果我们要实现 >= 比较,其实就是判断 > 或者 = ,需要采用 -o 操作符来进行。

man test 写道
       EXPRESSION1 -o EXPRESSION2
              either EXPRESSION1 or EXPRESSION2 is true

 

格式1:test "$S1" \> "$S2" -o "$S1" = "$S2"

格式2:[ "$S1" \> "$S2" -o "$S1" = "$S2" ]

还可以根据前面所述的 < 和 = 判断的方法,组合出很多写法,此处不一一列出。

如果用[[来进行,就不需要双引号和转义符。

man bash [[ ]] 写道
              expression1 || expression2
                     True if either expression1 or expression2 is true.
 

格式3:[[ $S1 > $S2 || $S1 = $S2 ]]

上述格式显得繁琐,也可以用 非操作(!) 来实现,因为“大于等于”就是“不小于”。

man bash [[ ]] 写道
              ! expression
                     True if expression is false.
 

格式4:[[ ! $S1 < $S2 ]]

 

[root@jfht ~]# S1=abc
[root@jfht ~]# S2=abd
[root@jfht ~]# [ "$S1" \> "$S2" -a "$S1" = "$S2" ] && echo ">="
[root@jfht ~]# [[ $S1 > $S2 || $S1 = $S2 ]] && echo ">="

[root@jfht ~]# [[ ! $S1 < $S2 ]] && echo ">="
[root@jfht ~]#

 

 

判断是否小于等于(不大于)(字典顺序)

在bash中实现 <= 的判断,也必须采用判断 < 或者 = 来进行。

格式1:test "$S1" \< "$S2" -o "$S1" = "$S2"

格式2:[ "$S1" \< "$S2" -o "$S1" = "$S2" ]

格式3:[[ $S1 < $S2 || $S1 = $S2 ]]

格式4:[[ ! $S1 > $S2 ]]

 

[root@jfht ~]# S1=abc
[root@jfht ~]# S2=abd
[root@jfht ~]# [ "$S1" \< "$S2" -o "$S1" = "$S2" ] && echo "<="
<=
[root@jfht ~]# [[ $S1 < $S2 || $S1 = $S2 ]] && echo "<="
<=
[root@jfht ~]# [[ ! $S1 > $S2 ]] && echo "<="
<=
[root@jfht ~]#

 

数值比较

注意:每种比较运算都可以写成好几种格式:

test格式:比较运算符为“-字母缩写”形式(见后面详细说明)。

[]格式:等价于test。

[[]]格式:其中的变量引用不需要加双引号,比较运算符与test同。

(())格式:其中的变量不需要加$符号,比较运算符的写法与Java同。

 

等于:eq uals

test "$VAR1" -eq "$VAR2"

[ "$VAR1" -eq "$VAR2" ]

[[ $VAR1 -eq VAR2 ]]

((VAR1 == VAR2))

 

大于等于(不小于):g reater e qual

test "$VAR1" -ge "$VAR2"

[ "$VAR1" -ge "$VAR2" ]

[[ $VAR1 -ge $VAR2 ]]

((VAR1 >= VAR2))

 

大于:g reater t han

test "$VAR1" -gt "$VAR2"

[ "$VAR1" -gt "$VAR2" ]

[[ $VAR1 -gt $VAR2 ]]

((VAR1 > VAR2))

 

小于等于(不大于):l ess e qual

test "$VAR1" -le "$VAR2"

[ "$VAR1" -le "$VAR2" ]

[[ $VAR1 -le $VAR2 ]]

((VAR1 <= VAR2))

 

小于:l ess t han

test "$VAR1" -lt "$VAR2"

[ "$VAR1" -lt "$VAR2" ]

[[ $VAR1 -lt $VAR2 ]]

((VAR1 < VAR2))

 

不等于:n ot e quals

test "$VAR1" -ne "$VAR2"

[ "$VAR1" -ne "$VAR2" ]

[[ $VAR1 -ne $VAR2 ]]

((VAR1 != VAR2))

 

[root@web ~]# VAR1=1234
[root@web ~]# VAR2=4321
[root@web ~]# test "$VAR1" -eq "$VAR2" && echo eq
[root@web ~]# test "$VAR1" -ne "$VAR2" && echo ne
ne
[root@web ~]#

 

man test 写道
INTEGER1 -eq INTEGER2
INTEGER1 is equal to INTEGER2

INTEGER1 -ge INTEGER2
INTEGER1 is greater than or equal to INTEGER2

INTEGER1 -gt INTEGER2
INTEGER1 is greater than INTEGER2

INTEGER1 -le INTEGER2
INTEGER1 is less than or equal to INTEGER2

INTEGER1 -lt INTEGER2
INTEGER1 is less than INTEGER2

INTEGER1 -ne INTEGER2
INTEGER1 is not equal to INTEGER2

 

man bash 写道
((expression))
The expression is evaluated according to the rules described below under ARITHMETIC EVALUATION. If the
value of the expression is non-zero, the return status is 0; otherwise the return status is 1.

[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the conditional expression expression.
 

[root@web ~]# ((1==1)) && echo "=="
==
[root@web ~]# ((1==2)) && echo "=="
[root@web ~]# I1=100
[root@web ~]# I2=200
[root@web ~]# ((I1==I2)) && echo "=="
[root@web ~]# ((I1!=I2)) && echo "!="
!=
[root@web ~]# ((I1<I2)) && echo "<"  
<
[root@web ~]# ((I1<=I2)) && echo "<="
<=
[root@web ~]# ((I1>I2)) && echo ">"  
[root@web ~]# ((I1>=I2)) && echo ">="
[root@web ~]#

 

 

本文链接:http://codingstandards.iteye.com/blog/1176767   (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录) 

上节内容:Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)

下节内容:Bash字符串处理(与Java对照) - 12.字符串连接

 

 

你可能感兴趣的:(java,String,bash,compareTo)