原文: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

!=      不等于,如:if [ "$a" != "$b" ], 这个操作符将在[[]]结构中使用模式匹配.
    <       小于,在ASCII字母顺序下.如:
               if [[ "$a" < "$b" ]]
               if [ "$a" \< "$b" ]     在[]结构中"<"需要被转义.
    >       大于,在ASCII字母顺序下.如:
           if [[ "$a" > "$b" ]]
           if [ "$a" \> "$b" ]  在[]结构中">"需要被转义.
    -z       字符串为"null".就是长度为0.
    -n       字符串不为"null"

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中字符串、数值的比较的更多相关文章

  1. Shell基础(二):Shell中的数值运算、条件测试操作、使用if选择结构

    一.Shell中的数值运算 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 使用expr.$[ ].let等整数运算工具:定义变量X=1234,然后计算X与78 ...

  2. shell中字符串操作【转】

    转自:http://blog.chinaunix.net/uid-29091195-id-3974751.html 我们所遇到的编程语言中(汇编除外)都少不了字符串处理函数吧,当然shell编程也不例 ...

  3. 在shell 中字符串,文件,数字的比较

    hadoop fs -test -e /path/exist ] ;then echo 'exist' else echo 'Error! path is not exist' fi 在shell中如 ...

  4. Shell中字符串的切割、拼接、比较、替换

    [截取] 一.Linux shell 截取字符变量的前8位,有方法如下: expr substr “$a” 1 8 : 二.按指定的字符串截取 第一种方法: ${varible##*string} # ...

  5. shell中的数值运算

    By francis_hao    Oct 2,2017   本文摘录自bash的man手册.   算数运算相关的形式 形式 含义 ((expression)) expression按照下面描述的算术 ...

  6. Shell中字符串分割的三种方法

    问题:对于’1,2,3,4,5’这样的字符串输出采用,分隔开的1 2 3 4 5 特征:在字符串中没有空格 解决方法1: #!/bin/bash var=’1,2,3,4,5’ var=${var// ...

  7. shell中字符串基本用法

    前言 今天在写脚本时,发现前阶段使用过的一些用法还是需要去百度查找,并且找到的答案还需要自己去筛选,耽误写脚本时间,这一篇对字符串之间的比较和逻辑判断都非常详细,借鉴他人之作,资源共享. 本片主要说明 ...

  8. Shell 中字符串变量的赋值注意点

    1. 变量赋值 语法:var="saaaa" PS: 等号两边不能有空格 2. 脚本示例如下: #!/bin/sh # Get bug activity info # usage ...

  9. shell中字符串截取

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var="User:123//321:/home/dir" 1. # 号截取,删除左边字符,保留右边字符. [root@z ...

随机推荐

  1. Thinkphp5 RCE总结

    thinkphp5最出名的就是rce,我先总结rce,rce有两个大版本的分别 ThinkPHP 5.0-5.0.24 ThinkPHP 5.1.0-5.1.30 因为漏洞触发点和版本的不同,导致pa ...

  2. VS2010-MFC(对话框:为控件添加消息处理函数)

    转自:http://www.jizhuomi.com/software/156.html MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理.比如我们点击 ...

  3. 转:shell笔试题

    源地址:http://blog.csdn.net/zcsylj/article/details/6799632 1.用Shell编程,判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录 ...

  4. ArduinoUno和Leonardo的区别

    学习过Arduino的同学对ArduinoUno和Lenardo的不同点会有所了解,但说起具体的区别估计还是很多人答不上来,今天我们就详细解释下Arduino Uno和Leonardo的不同. 我们从 ...

  5. WinForm中Dispose()和Close()的区别

    WinForm中Dispose()和Close()的区别 Close()会自动调用Dispose()方法,但是如果窗体是模态的,则不会调用 所以ShowDialog的时候,要用Dispose(),Sh ...

  6. springcloud(四):Eureka的配置详解

    在Eureka的服务治理体系中,主要分为服务端和客户端两个不同的角色,服务端为服务注册中心,客户端为提供各个接口的微服务应用,这里介绍一下Eureka的配置. Eureka服务端配置 在实际应用中,我 ...

  7. OSG实现正八面体剖分成球

    #include<Windows.h> #include<osg/Node> #include<osg/Geode> #include<osg/Group&g ...

  8. JS 日期比较

    Js 日期比较方法 第一种方式 function compareDate(s1,s2){ return ((new Date(s1.replace(/-/g,"\/")))> ...

  9. codeforces600E. Lomsat gelral(dsu on tree)

    dsu on tree先分轻重儿子先处理轻边,再处理重儿子再加上轻儿子的答案 #include<iostream> #include<cstdio> #include<q ...

  10. vue-cli 手机上浏览自己的项目

    首先我们需要更改config文件 拿我这个项目举例子,config文件下的index.js内的dev下的host需要更改为自己的电脑IP 其次,重点来了,我们需要更改路径,细节的为什么我还解释不来,简 ...