zoukankan      html  css  js  c++  java
  • [ Shell入门教程 ] Shell编程中数值计算方法实例

        SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结。主要包括let、bc、expr、(())等。

    1、let

        使用格式:let 表达式,表达式必须是完整的表达式,即等号两边。只能赋值,不支持浮点数运算,不支持直接输出

    $ var=10
    $ let var+=2 #var=12,中间不能有空格
    $ let var=var+2 #var=14
    $ let var*=2 #var=28
    $ let var/=2 # var=14

     无法计算浮点数,报错

    $ var=2.5
    $ let var+=1
    -bash: let: 2.5: 语法错误: 无效的算术运算符 (错误符号是 ".5")

    2、bc

      常用,支持浮点数运算

    echo "1+1" | bc # 2
    echo "1.5+1.5" | bc # 3.0
    echo "3-1.2" | bc #1.8
    echo "1.5*1.5" | bc #2.2
    echo "10/3" | bc # 3
    echo "scale=2;10/3" | bc #3.33

    看到乘数和除数的精度不同了吗?设置其他参数测试下

    echo "1.5*1.33333" | bc #1.99999
    echo "1.5111111111111111111111*1.33333" | bc #2.0148097777777777777777
    echo "4/5" | bc #0
    echo "1/2" | bc #0
    echo "6/5" | bc # 1

     乘法输出结果的精度和相乘数最长的进度保持一致。整数相除结果下取整。当然,它是可以赋值的

    var=$(echo "1+1"|bc) #var=2

    3、expr

      不支持浮点数运算,注意数字与计算符中的空格

    expr 1 + 1 #2
    expr 1 - 1 #0
    expr 1 * 1 #1,注意*号前面有\,否则报错
    expr 1 / 1 #1
    expr 1+1 #1+1,与预期不符
    expr 1.0 + 1 #输出语法错误
    var=$(expr 1 + 1) #var=2
    var2=$(expr ${var} + 2) #var2=4

    4、$(())

      不支持浮点数运算,不支持窗口直接执行$(()),

    var=$((1+1)) #1+1运算符前后中间是否有空格不影响计算
    v1=10
    v2=15
    var=$((v1+v2))
    var=$(($v1+$v2))
    a=$(( 1 + 1.0 )) #提示语法错误

      可以发现,在$(())中的变量带不带$取值符号都不影响计算。

    5、awk

      awk结合print的使用可以很好的各种完成数值计算,包括浮点数及精度控制。

    $ awk 'BEGIN{printf 1.0/2.0}' #0.5
    $ awk 'BEGIN{printf "5.2f%",10/3}' #3.33
    $ var1=10
    $ var2=3
    $ awk -v v1=${var1} -v v2=${var2} 'BEGIN{printf "%5.2f
    ",v1/v2}' #3.33

     最后来看个实例,输出1~5的数值

    #!/bin/bash
    
    i=1
    MAX=5
    while [ ${i} -lt ${MAX} ];do
      printf "${i}
    "
      i=$(($i+1))
    done

    输出结果

    1
    2
    3
    4

     

  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/linyfeng/p/7348713.html
Copyright © 2011-2022 走看看