`

Shell数值、字符串比较

 
阅读更多

摘自:http://apps.hi.baidu.com/share/detail/31263915

Shell中字符串、数值的比较

二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 

整数比较 

-eq       等于,如:if [ "$a" -eq "$b" ] 
-ne       不等于,如:if [ "$a" -ne "$b" ] 
-gt       大于,如:if [ "$a" -gt "$b" ] 
-ge       大于等于,如:if [ "$a" -ge "$b" ] 
-lt       小于,如:if [ "$a" -lt "$b" ] 
-le       小于等于,如:if [ "$a" -le "$b" ] 
<       小于(需要双括号),如:(("$a" < "$b")) 
<=       小于等于(需要双括号),如:(("$a" <= "$b")) 
>       大于(需要双括号),如:(("$a" > "$b")) 
>=       大于等于(需要双括号),如:(("$a" >= "$b")) 

字符串比较 
=       等于,如:if [ "$a" = "$b" ] 
==       等于,如:if [ "$a" == "$b" ],与=等价 
       注意:==的功能在[[]]和[]中的行为是不同的,如下: 
       1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么将为true 
       2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true 
       3 
       4 [ $a == z* ]      # File globbing 和word splitting将会发生 
       5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true 
       一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是. 
       但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像. 
!=       不等于,如:if [ "$a" != "$b" ] 
       这个操作符将在[[]]结构中使用模式匹配. 
<       小于,在ASCII字母顺序下.如: 
       if [[ "$a" < "$b" ]] 
       if [ "$a" \< "$b" ] 
       注意:在[]结构中"<"需要被转义. 
>       大于,在ASCII字母顺序下.如: 
       if [[ "$a" > "$b" ]] 
       if [ "$a" \> "$b" ] 
       注意:在[]结构中">"需要被转义. 
       具体参考Example 26-11来查看这个操作符应用的例子. 
-z       字符串为"null".就是长度为0. 
-n       字符串不为"null" 
       注意: 
       使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z 
       或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可 
       以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

 

SHELL下的数字比较及计算举例

比较:
方法一: if [ ${A} -lt ${B} ]; then ...
这是最基本的比较方法,使用lt(小于),gt(大于),le(小于等于),ge(大于等于),优点:还没发现;缺点:只能比较整数,使用lt,gt等不直观
方法二: if ((${A} < ${B})) then ...
这是CShell风格比较,优点:不用使用lt,gt等难记的字符串;缺点:还是只能比较整数
方法三: if (echo ${A} ${B} | awk '!($1>$2){exit 1}') then ...
这是使用awk比较,优点:可以比较小数;缺点:表达式太复杂,难记
方法四: if (echo ${A} - ${B} | bc -q | grep -q "^-"); then ...
这是使用bc计算比较,优点:可以比较小数;缺点:表达式更复杂,难记

计算:
方法一:typeset C=$(expr ${A} + ${B});
SHELL中的基本工具,优点:方便检测变量是否为数字;缺点:只能计算整数,且只能计算加减法,不能计算乘除法
方法二:let "C=${A}+${B}"; 或 let "C=A+B"
内嵌命令计算,优点:能计算乘除法及位运算等;缺点:只能计算整数
方法三:typeset C=$((A+B))
CShell风格的计算,优点:能计算乘除法及位运算等,简介,编写方便;缺点:不能计算小数
方法四:typeset C=${echo ${A} ${B} | awk '{print $1+$2}')
使用awk计算,优点:能计算小数,可以实现多种计算方式,计算灵活;缺点:表达式太复杂
方法五:typeset C=${echo ${A} + ${B} | bc -q)
使用awk计算,优点:能计算小数,计算方式比awk还多,计算灵活;缺点:表达式太复杂,小数点后面的位数必须使用scale=N来设置,否则可能会将结果截断为整数

分享到:
评论

相关推荐

    shell字符串比较判断是否为数字

    ### Shell字符串比较与数字判断详解 #### 一、概述 在Shell脚本编程中,进行字符串和数字的比较是一项常见的任务。本文将详细介绍如何在Shell脚本中进行字符串和数字的比较,包括基本的比较操作符及其使用场景,并...

    shell中字符串、数值的比较.rar_shell中字符串、数值的比较

    ### 字符串比较 在Shell脚本中,我们可以使用不同的运算符对字符串进行比较。以下是常用的字符串比较运算符: 1. **相等比较**: `==` 或 `=` 用于检查两个字符串是否相等。例如: ```bash str1="Hello" str2=...

    Shell中字符串排序的几种方法

    在Shell脚本编程中,对字符串进行排序是一个常见的任务,特别是在处理文本文件、日志或者其他包含文本数据的场景。本文将详细介绍三种在Shell中对字符串进行排序的方法。 **方法一:按ASCII正向排序** 在Shell中,...

    Shell高级编程实战视频.zip

    7-Shell的字符串表达式介绍-实践及企业案例脚本剖析 8-Shell的整数表达式介绍-实践及企业案例脚本剖析 9-Shell的逻辑操作符知识介绍-实践及企业案例脚本剖析 10-Shell的各种表达式综合脚本开发实战讲解 11-利用所学...

    Shell编程范例之数值运算-TinyLab原创.

    除了这些基础的数值运算,文档还介绍了一些其他相关的高级范例,如获取一个随机数,统计字符串中各单词出现次数,以及找出一组数据中人均月收入最高的家庭。这些范例展示了Shell脚本在处理数据和统计问题上的应用...

    shell十三问(shell十三问)

    `if`语句配合`[ ]`或`[[ ]]`进行条件测试,可以测试文件状态、数值比较、字符串匹配等。 9. **问:Shell如何实现循环?** 支持`for`、`while`和`until`循环。例如,`for i in {1..10}; do echo $i; done`将打印1...

    shell (bash) 比较运算符

    字符串比较是Shell脚本中另一个重要的功能,通过字符串比较可以实现逻辑控制和条件判断等功能。 - **`-z string`**:如果字符串 `string` 的长度为零(即为空),则返回真值。例如 `[ -z "$myvar" ]`,此命令用于...

    linux运维学习笔记:Shell变量的数值运算.pdf

    expr命令是一个手工命令行计算器,它不仅可以处理整数运算,还可以处理字符串。使用expr进行算数运算时,需要注意运算符与数字之间至少有一个空格。另外,使用乘号时需要用反斜线屏蔽其特殊含义,因为Shell可能会...

    shellbook-shell编程范例

    Shell编程范例这本书主要介绍了Shell编程的日常操作,这些操作涵盖了数值、逻辑值、字符串、文件、进程、文件系统等多个对象。这些对象的介绍和实例操作,有助于读者学以致用,并在使用过程中提高兴趣。本书并没有花...

    shell基础学习中的字符串操作、for循环语句示例

    - 字符串比较,如`if [ "$var" = "12" ]; then`。 - 正则表达式匹配,如`if [[ "$var" = *12* ]]; then`。 3. **嵌套if和循环** if语句可以嵌套在其他if或循环中,如上面的`if [ "$name" = "jxq" ]; then echo ...

    shell自学手册

    5. **字符串操作**:字符串处理是Shell编程中使用非常频繁的操作,手册会介绍如何在Shell中进行各种字符串操作。 6. **文件操作**:文件系统是Linux系统的重要组成部分,学会在Shell中进行文件的基本操作是十分必要...

    Shell常用操作符总结电脑资料.doc

    - `[[ ]]`提供了更灵活的字符串比较,例如可以忽略大小写,支持模式匹配。 - `(( ))`主要用于算术运算,它会将其中的内容当作数学表达式来解析和执行。 了解并熟练掌握这些操作符对于编写高效、准确的Shell脚本至关...

    Shell知识结构图

    Shell 支持变量的条件测试,例如使用 test 命令或 [] 进行数值和字符串的比较,如 -eq(相等)、-ne(不等)、-gt(大于)、-lt(小于)、=(相等)、!=(不等)等。还支持判断文件类型和权限,如 -f(文件)、-d...

    大数据技术之Shell.docx

    * 变量默认类型都是字符串类型,无法直接进行数值运算 * 变量的值如果有空格,需要使用双引号或单引号括起来 变量可以通过 unset 命令来撤销,例如 unset A。 readonly 命令可以用来声明静态变量,例如 readonly A=...

    shell经典教程 .TXT shell经典教程

    - **字符串比较**:比较两个字符串是否相等。 - **数值比较**:比较两个数字大小。 - **循环结构**: - **`for`循环**:遍历列表或字符串中的元素。 - **`while`循环**:当条件为真时重复执行一系列指令。 - *...

    shell讲义.pdf

    Shell提供了多种字符串操作方法,包括: - 获取字符串长度:`${#parameter}`。 - 获取子字符串:`${parameter#word}`, `${parameter##word}`, `${parameter%word}`, `${parameter%%word}`。 - 字符串替换:`${...

    shell 编程大全指南

    讲解字符串操作技巧,利用awk进行更高级的字符串处理,介绍参数替换方法,提高脚本的数据处理能力。 ### 综合应用与实践 书中不仅提供了理论知识,还设计了丰富的实践案例,鼓励读者动手实践,通过实际编写脚本来...

    shell十三问

    - Shell支持多种条件测试,如文件测试(-f、-d等)、数值比较(-eq、-ne等)和字符串比较(=、!=等)。 - `if`语句结合`test`或`[ ]`命令进行条件判断,如`if [ -f "$FILE" ]; then ... fi`。 4. **流程控制** -...

    Linux云计算之Shell脚本.zip

    字符串处理-01、字符串处理.mp4 数值运算-01、数值运算及处理.mp4 服务脚本设计-01、处理变量及字符串.mp4 服务脚本设计-02、条件测试与判断.mp4 服务脚本设计-03、选择与循环.mp4 服务脚本设计-04、case分支与服务...

Global site tag (gtag.js) - Google Analytics