• shell脚本--数值计算


      原生bash不支持简单的数学运算,即使是最简单的加减乘除

      但是,可以使用$[]和expr来实现整数运算

      如果要实现小数运算,可以使用bc命令

    使用$[]来实现:

    #!/bin/bash
    #文件名:test.sh
    
    echo $[ 1 + 3 ]
    
    echo $[ $1 + $2 ]
    echo $[ $1 - $2 ]
    echo $[ $1 * $2 ] #此时不用对*转义
    echo $[ $1 / $2 ]
    echo $[ $1 % $2 ]

      执行脚本:

    ubuntu@ubuntu:~$ ./test.sh 10 20
    4
    30
    -10
    200
    0
    10
    ubuntu@ubuntu:~$ 
    

      主要注意的是:

        1、运算符和两边要进行计算的数值之间,有空格

        2、虽然两个方括号和要进行计算的数值之间可以没有空格,但是强烈建议增加一个空格,因为后面会学到很多时候,方括号和参数之间都有空格。

      

    使用expr实现:

    #!/bin/bash
    #文件名:test.sh
    
    #expr是一个用于数值计算的命令
    #此时运算符号两边必须加空格,不加空格会原样输出,不会计算
    expr 1 + 3
    
    #命令行第2个参数和第3个参数求和
    expr $1 + $2
    expr $1 - $2
    expr $1 * $2    #失败
    expr $1 * $2   #因为乘号*在shell中有特殊的含义,所以要转义
    expr $1 / $2    #除法取商
    expr $1 % $2    #除法取模
    

      运行脚本:

    ubuntu@ubuntu:~$ ./test.sh 10 20
    4
    30
    -10
    expr: syntax error
    200
    0
    10
    ubuntu@ubuntu:~$ 
    

      

      使用expr之前先了解一下反引号``的功能,反引号的功能是将反引号括起来的内容执行,没错,就是执行,这就意味着,反引号括起来的是一条命令,此时是一个命令的运行结果,而结果就是一条命令,并且反引号不能单独使用,要将包含反引号及其括起来的语句赋值给一个变量,否则出错;如果不想将其赋给一个变量,就不要用反引号,直接写反引号中的内容,因为其内容就是一条命令。

    #!/bin/bash
    #文件名:test.sh
    
    #此时运算符号两边必须加空格
    #必须将反引号中命令的结果赋给一个变量
    num=`expr 1 + 3`
    echo $num
    
    #命令行第2个参数和第3个参数求和
    num=`expr $1 + $2`
    echo $num
    
    #乘法运算符仍要转义
    num=`expr $1 * $2`
    echo $num
    

      运行脚本:

    ubuntu@ubuntu:~$ ./test.sh 10 20
    4
    30
    200
    ubuntu@ubuntu:~$ 
    

      

    使用bc进行浮点数计算

    ubuntu@ubuntu:~$ echo 1.4*4 | bc  #乘号和运算数之间没有空格时,不用转义
    5.6
    ubuntu@ubuntu:~$ echo 1.4 * 4 | bc #乘号和运算数之间有空格时,必须转义
    5.6
    ubuntu@ubuntu:~$ echo 1.5-4 | bc
    -2.5
    

      鉴于计算时很难记错,运算符之间是否要加空格,统一推荐加,如果是乘号*,则转义。

  • 相关阅读:
    Swoole从入门到入土(27)——协程[协程容器]
    Swoole从入门到入土(26)——多进程[进程间锁]
    Swoole从入门到入土(25)——多进程[进程间无锁计数器]
    Swoole从入门到入土(24)——多进程[进程管理器ProcessManager]
    Swoole从入门到入土(23)——多进程[进程池ProcessPool]
    Swoole从入门到入土(22)——多进程[Process]
    Swoole从入门到入土(21)——毫秒定时器
    Swoole从入门到入土(20)——WebSocket服务器[协程版本]
    Swoole从入门到入土(19)——WebSocket服务器[文件传输]
    文字超过一定长度后省略号处理总结
  • 原文地址:https://www.cnblogs.com/-beyond/p/8232496.html
Copyright © 2020-2023  润新知