Shell----数学运算方法

shell数学运算

分类 描述 语法格式 示例
简单运算 使用内置命令let let 算术式 let res=1+2
使用内置命令declare declare -i 变量=算术式 declare -i res=1+2*3
使用[] [算术式] res=$[1+2]
算术扩展 ((算术式)) res=((1+2*3))
高级运算 使用外部程序expr expr 算术式 res=`expr 1+2*3`
使用bc echo “”\|bc echo “1+2”\|bc

let

let命令是bash内置命令,可以实现简单的算术以及逻辑运算

#!/bin/bash

init=10
echo "init-->"$init

let add=init+50
echo "init add 50-->"$add

let add=$init+50
echo "init add 50-->"$add

let "quota=init+50"
echo "use quotation marks,init add 50-->"$quota

let res=\(init+50\)*\(2+2\)
echo "bracket-->"$res
[root@mesoscloud_test255148 yueling]# bash lettest.sh 
init-->10
init add 50-->60
use quotation marks,init add 50-->60
bracket-->240
[root@mesoscloud_test255148 yueling]#

使用括号可能需要转义
[root@mesoscloud_test255148 yueling]# let sum=(1+2)*2 ;echo $sum
6
[root@mesoscloud_test255148 yueling]# let sum=(1+2)*(1+1) ;echo $sum
-bash: syntax error near unexpected token `( ’

[root@mesoscloud_test255148 yueling]# let sum=(1+2)*\(1+1\) ;echo $sum
6
[root@mesoscloud_test255148 yueling]# let “sum=(1+2)*(1+1)” ;echo $sum
6
对比这条执行的语句

declare

declare -i 变量=算术式

[root@mesoscloud_test255148 yueling]# declare -i sum=(1+2)*2+3
[root@mesoscloud_test255148 yueling]# echo $sum
9

[]

[]相当于let命令

#!/bin/bash

init=10
echo "init-->"$init

add=$[init+50]
echo "init add 50-->"$add
[root@mesoscloud_test255148 yueling]# bash squareBracketstest.sh 
init-->10
init add 50-->60
[root@mesoscloud_test255148 yueling]#

(())

(())等价于[]

#!/bin/bash

init=10
echo "init-->"$init

add=$((init+50))
echo "init add 50-->"$add

addcp=$(($init+50))
echo "init add 50-->"$addcp
[root@mesoscloud_test255148 yueling]# bash brackettest.sh 
init-->10
init add 50-->60
init add 50-->60
[root@mesoscloud_test255148 yueling]#

let命令中可以嵌套(())和[],(())和[]可以互相嵌套

#!/bin/bash

init=10
let res=$[init+51]
echo $res

let res=$[$init+52]
echo $res

let res=$(($init+53))
echo $res

let res=$((init+54))
echo $res

res=$[$((init)) + 55]
echo $res

res=$(($[init+56]))
echo $res

let res=$[$((init)) + 57]
echo $res

let res=$(($[init+58]))
echo $res
[root@mesoscloud_test255148 yueling]# bash mix.sh
61
62
63
64
65
66
67
68
[root@mesoscloud_test255148 yueling]# 

expr

expr同样可以用来进行基本的算术运算。

#!/bin/bash

init=10
echo $init

add=`expr $init + 50`
echo $add

注意:
1、变量与运算符之间必须使用空格作为分隔符,若不使用空格则当普通字符串处理
2、在使用expr时,要特别”表达式”中是否包含shell的特殊字符,如*、|、<、>、!、&、(、),要使用”\”来转义。

bc

bc命令是一个支持精确的浮点运算的高级计算器,支持数学函数调用。

#!/bin/bash

num1=1
echo "\$num1="$num1
num2=3;
echo "\$num2="$num2

resInteger=`expr $num1 / $num2`
echo "expr : $num1/$num2="$resInteger

resScale=`echo "scale=9; $num1 / $num2" | bc`
echo "bc scale=9: $num1/$num2="$resScale
[root@mesoscloud_test255148 yueling]# bash bctest.sh 
$num1=1
$num2=3
expr : 1/3=0
bc scale=9: 1/3=.333333333
[root@mesoscloud_test255148 yueling]#

bc还有很多高级用法,不在此一一展示,只是说明它可以执行数学计算~~~ 可自行 man bc进行研究

bc计算中若使用括号:
在双引号之间的括号不用转义,但是如果不使用引号引起来就需要转义
[root@mesoscloud_test255148 yueling]# sum=echo "(1+2)*2"|bc ;echo $sum
6
[root@mesoscloud_test255148 yueling]# sum=echo \(1+2\)*2|bc ;echo $sum
6

猜你喜欢

转载自blog.csdn.net/yue530tomtom/article/details/80910993