原文: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. 苹果CMS

    本篇将主要讲解使用过程中普遍遇到的“问题”,这些问题并非是BUG,通常是需要我们自己去注意的一些点.(会结合用户反馈持续补充)http://www.maccms.com/doc/v10/faq.htm ...

  2. System.Web.Mvc.HttpNotFoundResult.cs

    ylbtech-System.Web.Mvc.HttpNotFoundResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, ...

  3. 基于baseline和stochastic gradient descent的个性化推荐系统

    文章主要介绍的是koren 08年发的论文[1],  2.1 部分内容(其余部分会陆续补充上来). koren论文中用到netflix 数据集, 过于大, 在普通的pc机上运行时间很长很长.考虑到写文 ...

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

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

  5. wps中,怎么快速查看xls中隐藏的图片

    步骤: 页面布局->选择窗格 即可在右方看到"文档中的对象“

  6. 阿里云 Aliplayer高级功能介绍(七):多分辨率

    基本介绍 网络环境比较复杂.网速不稳定,Aliplayer提供了多分辨率播放的模式,用户可以手工切换分辨率和播放器选择最优分辨率,基本UI如下: Source模式 source的方式指定多个清晰度的地 ...

  7. Elasticsearch 5.6.4 window 安装并简单使用head

    1.现在elasticsearch安装包 https://www.elastic.co/downloads/elasticsearch 2.解压elasticsearch-5.6.4.zip 到需要安 ...

  8. JavaSE_08_Collections常用功能

    1.1 常用功能 java.utils.Collections是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean addAll(Colle ...

  9. PAT甲级——A1012 The Best Rank

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  10. JSP四大域对象与九大内置对象

    什么是内置对象? 在jsp开发中会频繁使用到一些对象,如 ServletContext.HttpSession.PageContext 等: 如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手 ...