zoukankan      html  css  js  c++  java
  • [转]shell基本算术运算

    from:http://www.cnblogs.com/yfanqiu/archive/2012/05/10/2494031.html#undefined

    shell程序中的操作默认都是字符串操作,在要运行数学运算符的时候可能得到意想不到的答案:

    var=1
    var=$var+1
    echo $var

    output:
    1+1

    从这个例子中可以看出shell字符串连接的操作,需要注意的是空格。

    在shell中可以使用let来指示下面是算术表达式,let表达式内变量不用加$

    var=1
    let "var+=1" 或 let var+=1 这种写法运算符间不能有空格
    echo $var

    output:
    2

    这其中的let可以用(())代替,let ″j=i*6+2″等价于((j=i*6+2)), 就像很多的循环中用法一样

    注意:let必须是完整的算术表达式,即有等号两边

       (())、expr 可以只有等号右边的计算,由$((...))、$(expr ...)、`expr ...` 查看返回结果

    var=1
    ((var++)) 查看结果: echo $(())
    echo $var

    output:
    2

    还有一种写法:

    var=1
    var=$[$var+1]
    echo $var

    output:
    2

    使用expr,需要注意的是其中的那个符号并不是单引号,而是“1”左边的那个键

    注意:将需要运算的表达式写入在expr 后面,保证参数与运算符号中间有空格隔开。

    var=1
    var=`expr $var + 1`
    echo $var

    output:
    2

    1:在shell 中$() 与 ``等效。执行中间包含的命令语句,返回执行结果。
    2:从效率来说let==(()) > expr > bc。let和(())运行是内建命令,使用相同的算法。
    3:let 和 expr 的运算是整数运算,不包括浮点预算。
    4:expr和bc是外部程序,expr的体积几乎等于bc的1/3,执行一次装入内存所消耗的时间就不一样。
    5:从运算能力来说,bc排第一位。



    上面的这几种做法都是只能处理整数运算,下面的这种做法是可以处理浮点数的:

    var=1
    var=`echo "scale=1;$var*2.0"|bc` bc预设输出整数,用scale 指定小数点下位数
    echo $var

    output:
    2.0

    上面的`符号跟上面的一样,是1左边的那个键,而bc是linux上面的一个计算器,支持除位运算以外的所有运行。

    另外一个支持浮点运算的方法是awk:

    var=1
    var=`echo "$var 1"|awk '{printf("%g",$1+$2)}'`
    echo $var

    output:
    2

    $ c=$(awk 'BEGIN{print 7.01*5-4.01 }')

    $ echo $c

    http://www.cnblogs.com/skynext/
  • 相关阅读:
    Leetcode 538. Convert BST to Greater Tree
    Leetcode 530. Minimum Absolute Difference in BST
    Leetcode 501. Find Mode in Binary Search Tree
    Leetcode 437. Path Sum III
    Leetcode 404. Sum of Left Leaves
    Leetcode 257. Binary Tree Paths
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
    Leetcode 226. Invert Binary Tree
    Leetcode 112. Path Sum
    Leetcode 111. Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/skynext/p/3877203.html
Copyright © 2011-2022 走看看