command linux

linux shell 加减乘除

  1. bc

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    bc是比较常用的linux计算工具了,而且支持浮点运算:

    [root@localhost]$ a=`echo 1+1 | bc`
    [root@localhost]$ echo $a


    但是浮点数运算的精度问题,暂时还没明白什么情况:

    [root@localhost]$ b=`echo "1.2*1.2" | bc`
    [root@localhost]$ echo $b
    1.4
    [root@localhost]$ c=`echo "5.0/3.0" | bc`
    [root@localhost]$ echo $c
    1
    [root@localhost]$ d=`echo "scale=2;5.0/3.0" | bc`
    [root@localhost]$ echo $d
    1.66
    [root@localhost]$ e=`echo "scale=2;5.0/6.0" | bc`
    [root@localhost]$ echo $e
    .83
    尤其最后一个,这到底什么鬼,小数点前的那个0跑哪里去了。。。
  2. expr

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    不支持浮点数计算。这又是个大坑.而且要注意数字与运算符中的空格

    [root@localhost]$ a=`expr 1+1`
    [root@localhost]$ echo $a
    1+1
    [root@localhost]$ a=`expr 1 + 1`
    [root@localhost]$ echo $a
    2
    [root@localhost]$ b=`expr 10 / 2`
    [root@localhost]$ echo $b
    5
  3. $(())

    1
    2
    3
    4
    5
    6
    7
    8
    同expr,不支持浮点数运算

    [root@localhost]$ a=$((1+1))
    [root@localhost]$ echo $a
    2
    [root@localhost]$ b=$((1 + 3 ))
    [root@localhost]$ echo $b
    4
  4. let

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    不支持浮点数运算,而且不支持直接输出,只能赋值

    [root@localhost]$ let a=1+1
    [root@localhost]$ echo $a
    2
    [root@localhost]$ let b=50/5
    [root@localhost]$ echo $b
    10
    [root@localhost]$ let c=1.2*2
    -bash: let: c=1.2*2: syntax error: invalid arithmetic operator (error token is ".2*2")
  5. awk

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    普通的运算:

    [root@localhost]$ a=`echo | awk '{print 1.0/2.0}'`
    [root@localhost]$ echo $a
    0.5
    控制精度:

    [root@localhost]$ b=`echo | awk '{printf("%.2f",1.0/2.0)}'`
    [root@localhost]$ echo $b
    0.50
    传递参数:

    [root@localhost]$ c=`echo | awk -v a=1 -v b=3 '{printf("%.4f",a/b)}'`
    [root@localhost]$ echo $c
    0.3333