Linux shell脚本012(数学运算)

算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。

  • +:对两个变量做加法。

  • –:对两个变量做减法。

  • *:对两个变量做乘法。

  • /:对两个变量做除法。

  • **:对两个变量做幂运算。

  • %:取模运算,第一个变量除以第二个变量求余数。

  • +=:加等于,在自身基础上加第二个变量。

  • -=:减等于,在第一个变量的基础上减去第二个变量。

  • *=:乘等于,在第一个变量的基础上乘以第二个变量。

  • /=:除等于,在第一个变量的基础上除以第二个变量。

  • %=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。

在使用这些运算符时,需要注意到运算顺序的问题。例如输入下面的命令,输出1+2的结果。

echo 1+2

Shell并没有输出结果3,而是输出了1+2。在shell中有三种方法可以更改运算顺序。

1、用expr改变运算顺序。可以用echo expr 1 +2来输出1+2的结果,用expr表示后面的表达式为一个数学运算。需要注意的是,`并不是一个单引号,而是“Tab”键上面的那个符号。

[root@ansible test]# echo `expr 1 + 2`
3

2、用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是let m=1+2。然后用echo$m来输出m的值。如果没有let,则会输出1+2。

[root@ansible test]# let m=5+4
[root@ansible test]# echo $m
9
[root@ansible test]# m=1+2
[root@ansible test]# echo $m
1+2

3、用 [ ] []符号的中括号中,中括号中的内容将先进行数学运算。例如命令echo$[1+2],将输出结果3。

[root@ansible test]# echo $[5+4]
9
[root@ansible test]# b=$[5+4]
[root@ansible test]# echo $b
9
[root@ansible test]# echo $[1.5*3]         #带小数不适用
-bash: 1.5*3: 语法错误: 无效的算术运算符 (错误符号是 ".5*3")
[root@ansible test]# echo $[1.5+3]
-bash: 1.5+3: 语法错误: 无效的算术运算符 (错误符号是 ".5+3"

4、bc命令是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。

[root@ansible test]# echo "1+2"
1+2
[root@ansible test]# echo "1+2"|bc
3
[root@ansible test]# m='1+2'
[root@ansible test]# echo $m
1+2
[root@ansible test]# echo $m|bc
3
[root@ansible test]# m=1+2
[root@ansible test]# echo $m|bc
3
[root@ansible test]# echo 'scale=2;2/3'|bc  #scale=2表示设置小数位为2位
.66
[root@ansible test]# echo 'scale=2;5/3'|bc
1.66
[root@ansible test]# echo '1.5*3'|bc
4.5
[root@ansible test]# m=1.5*3
[root@ansible test]# echo $m|bc
4.5
[root@ansible test]# echo '1.55*3.1'|bc   #默认为两位小数
4.80
[root@ansible test]# echo 'scale=5;1.55*3.1'|bc
4.805

下面是简单的脚本例子,此例子只是展示运算方法,并不是合适的运算方法:

#!/bin/bash
echo '输入第一个数字:'
read a
echo '输入第二个数字:'
read b
echo '运算结果如下:'
expr $a + $b &> /dev/null
if [ $? -eq 0 ];then       #借此判断a、b是否全是整数
        echo "$a+$b="$[a+b]
        echo "$a-$b="$[a-b]
        echo "$a*$b="$[a*b]
        echo "$a/$b="$[a/b]
        echo "$a%$b="$[a%b]
        echo -n "$a/$b="&&awk 'BEGIN{printf "%.5f\n",'$a' / '$b'}'
else
        echo -n "$a+$b="&&echo "$a+$b"|bc
        echo -n "$a-$b="&&echo "$a-$b"|bc
        echo -n "$a*$b="&&echo "scale=5;$a*$b"|bc
        echo -n "$a/$b="&&echo "scale=5;$a/$b"|bc
fi

参考 http://blog.csdn.net/taijianyu/article/details/6907288

猜你喜欢

转载自blog.csdn.net/cyan_grey/article/details/79290141