robin 发表于 2018-8-25 10:59:38

shell中数字计算方法(bc/expr/$(())/let/awk)

  1.bc
  常用计算工具,而且支持浮点运算:
  # echo 1+1 | bc
  2
  浮点数精度问题未解决
  # echo "1.2*1.2" | bc
  1.4
  # echo "scale=2;1.2*1.2" | bc
  1.44
  # echo "5.0/3.0" | bc
  1
  # echo "scale=2;5.0/6.0"|bc
  .83
  
  2.expr
  不支持浮点运算,注意运算符左右都有空格,使用乘号时,必须用反斜线屏蔽其特定含义
  # expr 10 + 10
  20
  # expr 1500 + 900
  2400
  # expr 30 / 3
  10
  # expr 30 / 3 / 2
  5
  # expr 30 \* 3
  90
  3.$(())
  同expr,不支持浮点数运算
  # echo $((1+1))
  2
  # echo $((2*3))
  6
  # echo $((6/2))
  3
  # echo $((6/5))
  1
  
  4.let
  不支持浮点数运算,而且不支持直接输出,只能赋值
  # let a=10+10
  # echo $a
  20
  # let b=50/5
  # echo $b
  10
  # let c=6*5
  # echo$c
  30
  # let c=6/5
  # echo$c
  1
  
  5.awk
  普通的运算:
  # echo|awk '{print(1+1)}'
  2
  # echo|awk '{print(1/2)}'
  0.5
  # echo|awk '{print(1/3)}'
  0.333333
  # echo|awk '{print(3*5)}'
  15
  控制精度(printf):
  # echo | awk '{printf("%.2f \n",1/2)}'
  0.50
  # echo | awk '{printf("%.4f \n",1/3)}'
  0.3333
  传递参数:
  # echo | awk -v a=5 -v b=6 '{printf("%.4f \n",a/b)}'注:该方法a,b不需加$符
  0.8333
  # a=5
  # b=6
  # echo|awk "{print($a/$b)}"注:该方法需在大括号外打双引号
  0.833333

页: [1]
查看完整版本: shell中数字计算方法(bc/expr/$(())/let/awk)