原文: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数值及字符串比较相关推荐

  1. c语言中按照“|”字符串截取,shell中取字符串子串的几种方式 截取substr

    echo "123456789" | awk '{print substr($0,5,2)}' 截取 1)awk中函数substr substr(源字符串,开始索引,长度)   开 ...

  2. 剑指offer:面试题20. 表示数值的字符串

    题目:表示数值的字符串 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100"."5e2"."-123".&q ...

  3. (剑指Offer)面试题54:表示数值的字符串

    题目: 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.14 ...

  4. 【JS】JS中数值型字符串相加变成拼接字符串的解决方法

    [JS]JS中数值型字符串相加变成拼接字符串的解决方法 参考文章: (1)[JS]JS中数值型字符串相加变成拼接字符串的解决方法 (2)https://www.cnblogs.com/xsjs/p/1 ...

  5. 数值和字符串互相转换

      今天看书看到了strintstream,感觉用起来很方便,尤其是将数值转换为字符串的时候使用stringstream,可以达到非常美妙的效果.对比前面我的一篇文章--如何将数字转换为字符串,使用# ...

  6. shell中(字符串截取)

    cut是以每一行为一个处理对象的,这种机制和sed是一样的.(关于sed的入门文章将在近期发布) 2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢? cut命令主要是接 ...

  7. C++11带来的全新数值和字符串转换函数

    数值转字符串: std::string str; int a = std::stoi(str); float b = std::stof(str); double b = std::stod(str) ...

  8. python的数值可以转换为字符串_python 数值转换为字符串Python对HTML转义字符进行反转义...

    什么是转义字符 在 HTML 中 .& 等字符有特殊含义( 用于标签中,& 用于转义),他们不能在 HTML 代码中直接使用,如果要在网页中显示这些符号,就需要使用 HTML 的转义字 ...

  9. 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格

    一.把数组排成最小的数: 1.题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为 ...

最新文章

  1. 如何看待矿池抽税激励社区开发者?如何看待EOS?——BCH极客大赛江卓尔专访
  2. hdu 4605 Magic Ball Game (在线主席树/离线树状数组)
  3. 秒杀多线程第五篇 经典线程同步 关键段CS
  4. 【Linux】Linux按tab键补全文件(名)或路径不区分大小写
  5. Nginx基本数据结构之ngx_array_t
  6. 软件制胜之道精彩观点聚合
  7. 曾经风光无限的 JSP,为什么现在很少有人使用了?
  8. Java-经典排序算法(二)——快速排序
  9. linux shell 字体颜色样板,BASH shell下设置字体及背景颜色
  10. 卡巴斯基2009离线升级包制作方法
  11. Excel创建多个并列柱状图,并加次级坐标轴
  12. 用hundred造句子_冬至暖心短信问候祝福句子,冬至祝福词
  13. Internet Explorer无法打开站点,已终止操作
  14. 想进大公司先测你EQ
  15. day23 Java8新特性
  16. 语音处理 之 训练维护
  17. 12对胸椎对应体表标志_腰椎的体表标志_第一至第五腰椎怎么定位相应体表标志怎么对应_中国武警总医院...
  18. 多媒体计算机主要有哪些基本特性,多媒体计算机的基本特性
  19. 华为eNSP的介绍与简单使用
  20. 系统加速比(amdahl定律)

热门文章

  1. docker for mac的JSON配置文件中的hosts项修改后无法生效
  2. samba 设置文件的读写权限
  3. 源码编译安装Apache-附一键部署脚本
  4. javascript(面向对象,作用域,闭包,设计模式等)
  5. 4thweek.P_problemB .poj1505copy books.二分法
  6. 程序员选择公司的8个标准
  7. html如何为“选择”框创建占位符?
  8. ApacheCN 安卓译文集 20211225 更新
  9. 复杂性思维中文第二版 七、物理建模
  10. 笨办法学 Python · 续 练习 49:`sed`