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

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

原文地址:https://www.cnblogs.com/-beyond/p/8232496.html