Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)

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

 2011/9/22 8:13:23  codingstandards  http://codingstandards.iteye.com  我要评论(0)
  • 摘要:Bash字符串处理(与Java对照)-11.比较两个字符串大小(字典顺序、数值比较)InJavaString.compareTointcompareTo(StringanotherString)按字典顺序比较两个字符串。如果返回0,表示相等;<0表示小于;>0表示大于。intcompareToIgnoreCase(Stringstr)不考虑大小写,按字典顺序比较两个字符串。InBash判断是否大于(字典顺序)格式1:["$S1"\>"$S2"]判断S1是否大于S2
  • 标签:Bash Java 字符串

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中并没有 >= caozuofu.html" target="_blank">操作符。

如果我们要实现 >= 比较,其实就是判断 > 或者 = ,需要采用 -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.字符串连接

?

?

发表评论
用户名: 匿名