`

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中字符串、数值的比较.rar_shell中字符串、数值的比较

    通过shell语言进行字符串的比较以及实现数值的比较

    Shell高级编程实战视频.zip

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

    shell 编程指南pdf

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    LinuxShell编程

    字符串表达式(判断条件命令if)2.3.3. 字符串操作2.3.4. 数值表达式2.3.5. 复合条件表达式2.4. 流程控制2.4.1. 条件转移 :if 条件语句2.4.2. 选择语句case2.4.3. 循环语句2.5. Shell中的函数运用2.5.1. 函数声明...

    包含了几乎所有 unix shell script编程特性的 unix shell script 完整项目, 基于 IBM AIX,附注释.rar

    压缩方式是gzip(.gz),本来 bzip2(.bz)的压缩率比 .gz要大1.5倍左右, 因为考虑到要 用 zgrep工具直接在文件中search字符串,而且影盘容量足够大,所以也就用gzip了.我自己感觉这三个 k shell script基本上把 aix 的 k ...

    shell学习记录

    一些关于shell编程的基础知识,shell学习手册,介绍一些关于shell的基础知识。 目录:shell简介,数值计算,shell的循环结构,shell技巧。字符串操作,文件操作,进程操作等

    LINUX与UNIX SHELL编程指南(很全)

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    Linux之shell中if语句–test命令

    文章目录1.test命令的用法1.1数值比较1.2字符串比较1.3文件比较2.复合条件测试3.if-then的高级特性 1.test命令的用法 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符串和文件三个方面的测试。 ...

    shell算数运算

    如果给整型变量赋一个字符串值,则bash将把变量赋值为0。可以对已定义的整型变量执行算术运算(如果变量未被定义为整型变量, 内置的let命令也允许算术操作。见本节let命令部分)。如果给整型变量赋一个浮点数值,则...

    Linux与unix shell编程指南

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    绝版经典《Linux与UNIX Shell编程指南》

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    shell教程-30章,下了之后会让你大吃一惊,相当好

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    LINUX与UNIX SHELL编程指南 高清PDF

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    跟老男孩学Linux运维:Shell编程实战

    / 976.3 字符串测试表达式 / 1026.4 整数二元比较操作符 / 1056.5 逻辑操作符 / 1086.6 测试表达式test、[]、[[]]、(())的区别总结 / 120第7章 if条件语句的知识与实践 / 1217.1 if条件语句 / 1217.2 if条件...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    Shell 编程范例

    大量的实例介绍 Shell 日常操作,“对象” 涵盖数值、逻辑值、字符串、文件、进程、文件系统 等。这样有助于学以致用,并在用的过程中提高兴趣。也可以作为 Shell 编程索引,在需要的 时候随时检索。

    Shell编程范例之网络操作-TinyLab原创

    之前已经介绍了shell编程范例之数值、布尔值、字符串、文件、文件系统、进程等的操作。这些内容基本覆盖了网络中某个独立机器正常工作的“方方面面”,现在需要把视角从单一的机器延伸到这些机器通过各种网络设备和...

    linux shell 编程教程

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    Shell脚本学习笔记

    3.2.2字符串比较 64 3.2.3 文件比较 65 3.2.4 复合条件检查 65 3.3 if-then的高级特征与case命令 66 3.3.1 使用双圆括号 66 3.3.2 使用双方括号 67 3.3.3 case命令 67 3.4 for命令 67 3.4.1 读取列表 68 3.4.2 读取...

Global site tag (gtag.js) - Google Analytics