`

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.字符串连接

 

 

3
0
分享到:
评论

相关推荐

    PyYAML-5.1.2.tar.gz

    - **解析YAML**:能够读取YAML格式的文件或字符串,将其转换为Python的数据结构,如字典、列表、字符串、数字等。 - **序列化Python对象**:可以将Python的数据结构转化为YAML字符串,方便存储或传输。 - **安全解析...

    requests-2.23.0.tar.gz

    5. **POST数据提交**:对于POST请求,可以方便地传递字典、字符串、文件对象等作为数据,如`requests.post(url, data=dict(key=value))`。 6. **会话对象**:Requests提供`Session`对象,用于保存cookies和其他配置...

    PyYAML-5.3.1.tar.gz

    PyYAML 是一个用于处理 YAML 格式数据的 Python 库,版本 5.3.1 是其稳定的一个版本,广泛应用于配置文件解析、数据序列化与反序列化等领域。YAML,全称 Yet Another Markup Language,是一种简洁易读的数据序列化...

    PyPI 官网下载 | structlog-21.1.0-py2.py3-none-any.whl

    1. **结构化数据**:它允许你定义日志事件的结构,如时间戳、模块、函数名、级别等,所有这些信息都会被封装在字典或其他可迭代对象中,而非简单的字符串。 2. **处理链**:`structlog`支持日志处理器链,允许...

    Python库 | utilmy-0.1.16343626-py3-none-any.whl

    `utilmy`库的核心在于它的实用工具模块,这些模块涵盖了数据处理、文件操作、字符串处理、日期时间等多个方面。例如: 1. **数据处理**:`utilmy`可能提供了对数据结构如列表、字典等进行高效操作的方法,包括但不...

    PyPI 官网下载 | Json_Dict-0.2.1552750277-py3-none-any.whl

    在Python中,内置的json模块提供了基本的JSON操作,如序列化(将Python对象转换为JSON字符串)和反序列化(将JSON字符串转换回Python对象)。然而,Json_Dict库进一步扩展了这些功能,提供了一些高级特性,以更好地...

    Python库 | cuenca_validations-0.6.7.dev4-py3-none-any.whl

    1. **数据类型验证**:确保输入数据是正确的类型,如字符串、整数或日期。 2. **格式验证**:检查数据是否符合特定的格式要求,比如银行账号、信用卡号的格式。 3. **范围验证**:验证数值是否在允许的范围内,...

    Python库 | constructs-3.3.169-py3-none-any.whl

    例如,如果你正在处理一个包含固定长度字符串和后续两个无符号整数的二进制格式,你可以这样定义构造: ```python from constructs import Construct, Int32ul, String class MyStruct(Construct): name = ...

    PyYAML-3.12.tar.gz

    - **解析(Parsing)**:可以将YAML格式的文本转换为Python数据结构,如字典、列表、字符串等。 - **生成(Emitting)**:可以将Python数据结构转换为YAML格式的文本,方便保存或传输。 - **安全加载(Safe Loading...

    AioMemcached-0.8.4-py2.py3-none-any.whl.zip

    - **序列化和反序列化**:支持多种数据类型,如字符串、数字、列表、字典等。 - **错误处理**:优雅地处理网络错误和其他异常。 总结,AioMemcached是Python开发者在使用Memcached时的理想选择,尤其在需要处理大量...

    Python库 | mypy_boto3_quicksight-1.17.11.0-py3-none-any.whl

    例如,当你调用QuickSight的API创建数据源或仪表板时,类型检查可以确保你正确地传递了所需的参数类型,如字符串、字典或列表。 总的来说,`mypy_boto3_quicksight` 是Python开发者在使用Boto3与Amazon QuickSight...

    simplejson-2.0.9.tar.gz

    例如,可以使用`dumps()`函数将字典、列表、数字、字符串等类型的数据转换为JSON格式: ```python import simplejson as json data = {"name": "John", "age": 30, "city": "New York"} json_str = json.dumps...

    Python库 | globaltrie-1.0.2-py3-none-any.whl

    在Python库globaltrie中,开发者可以利用这个数据结构来存储和检索字符串,尤其是在处理大量字符串集合时,如IP地址、URL、关键词等,它能显著提高搜索效率。通过将字符串的每个字符作为节点,globaltrie构建了一个...

    Python库 | JSONFormatBear-0.9.0.1482008498-py3-none-any.whl

    3. **数据转换**:可能支持将Python对象转化为JSON格式,或者将JSON字符串反序列化为Python数据结构,如字典和列表。 4. **数据操作**:可能提供了对JSON数据进行查找、替换、添加、删除等操作的接口,方便在处理...

    Python库 | ensure-0.6.1-py2.py3-none-any.whl

    例如,你可以使用"ensure"库来确保函数接收到的是字符串而非整数,或者确保列表中的每个元素都是字典等。 该库的版本为0.6.1,意味着它是经过多次迭代和优化的稳定版本。"py2.py3-none-any"这部分标识符表示此库...

    PyPI 官网下载 | mypy-boto3-compute-optimizer-1.12.14.0.tar.gz

    在这里,`instance_id` 参数被标注为字符串类型,返回值被标注为字典类型,`mypy` 将检查这些类型注解,确保在运行前避免类型相关的错误。 总结来说,`mypy-boto3-compute-optimizer-1.12.14.0.tar.gz` 是一个包含 ...

    Python库 | hypothesis-3.44.3-py3-none-any.whl

    例如,你可以创建一个策略来生成整数、字符串、甚至是复杂的数据结构,如字典或列表。然后,这些策略可以与`@given`装饰器一起使用,将它们应用到测试函数上。测试函数内部,Hypothesis会自动使用这些生成的数据运行...

    Python库 | pydantic-0.32.2-py36.py37.py38-none-any.whl

    在这个例子中,我们定义了一个User模型,其中包含了用户名(字符串)、电子邮件(必须是有效的电子邮件格式)和年龄(可选的整数)。然后,我们使用这个模型解析和验证一个包含用户数据的字典。 **总结** pydantic...

    Python库 | plone.app.querystring-1.4.9-py2-none-any.whl

    `plone.app.querystring` 提供了处理查询字符串的类和函数,可以将查询字符串解析为字典结构,便于访问和修改其中的参数。它支持多种编码方式,包括URL编码(percent-encoded),并且能够处理多值参数,比如`key=...

    Python库 | mypy_boto3_ecs-1.14.18.0-py3-none-any.whl

    在这里,`mypy_boto3_ecs`会确保你传递的参数类型符合AWS ECS API的要求,如`family`和`containerDefinitions`必须是字符串和字典列表,否则会报错。 总的来说,`mypy_boto3_ecs`为开发使用AWS ECS的Python应用提供...

Global site tag (gtag.js) - Google Analytics