合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[TOC] # Shell变量的数值计算   shell变量的数值计算常见的有如下几个命令:`(())`、`let`、`expr`、`bc`、`$[]`。 ## `(())`用法举例,执行简单的整数运算,只需将特定的算术表达式 ~~~ [luo@LNMP-CenOS-6.5 ~] $ a=$((1+2**3-4%3)) # **为取幂运算 [luo@LNMP-CenOS-6.5 ~] $ echo $a 8 [luo@LNMP-CenOS-6.5 ~] $ echo $((a+=1)) # 相当于a=a+1 9 [luo@LNMP-CenOS-6.5 ~] $ echo $((a)) 10 [luo@LNMP-CenOS-6.5 ~] $ echo $((a--)) # 先赋值,再-- 10 [luo@LNMP-CenOS-6.5 ~] $ echo $((a)) 9 [luo@LNMP-CenOS-6.5 ~] $ echo $((3>2)) 1 [luo@LNMP-CenOS-6.5 ~] $ echo $((3<2)) 0 [luo@LNMP-CenOS-6.5 ~] $ echo $((100*(100+1)/2)) 5050 ~~~ 又如: ~~~ [luo@LNMP-CenOS-6.5 ~] $ cat sh.sh #/bin/bash _1=$1 __=$2 echo " ${_1} + ${__} = " $(($_1+$__)) echo " ${_1} * ${__} = " $(($_1*$__)) echo " ${_1} - ${__} = " $(($_1-$__)) echo " ${_1} / ${__} = " $(($_1/$__)) echo " ${_1} ** ${__} = " $(($_1**$__)) echo " ${_1} % ${__} = " $(($_1%$__)) [luo@LNMP-CenOS-6.5 ~] $ bash sh.sh 12 3 12 + 3 = 15 12 * 3 = 36 12 - 3 = 9 12 / 3 = 4 12 ** 3 = 1728 12 % 3 = 0 ~~~ 小实例:使用shell实现计算器的功能 ~~~ [luo@LNMP-CenOS-6.5 ~] $ cat calc.sh #/bin/bash echo $(($1 $2 $3)) [luo@LNMP-CenOS-6.5 ~] $ ./calc.sh 2+3 5 ~~~ ## let用法 格式: `let 赋值表达式` 功能等同于`(())` 赋值表达式 ~~~ [luo@LNMP-CenOS-6.5 ~] $ i=2 [luo@LNMP-CenOS-6.5 ~] $ i=i+8 # 此时等号右边无法计算,我们可以使用 $((i+8))进行计算 [luo@LNMP-CenOS-6.5 ~] $ echo $i i+8 [luo@LNMP-CenOS-6.5 ~] $ i=2 [luo@LNMP-CenOS-6.5 ~] $ let i=i+8 # let的作用 [luo@LNMP-CenOS-6.5 ~] $ echo $i 10 ~~~ ## expr 命令用法   expr命令一般用于整数值,但也可用于字符串,用来求表达式变量的值,同事expr也是一个手工命令行计数器。   语法:expr expression ~~~ [luo@LNMP-CenOS-6.5 ~] $ expr 2 + 2 # 运算符两边一定要有空格 4 [luo@LNMP-CenOS-6.5 ~] $ expr 2 * 2 # 乘以号必须使用反斜线进行转义 expr: 语法错误 [luo@LNMP-CenOS-6.5 ~] $ expr 2 \* 2 4 ~~~ 或者 expr $[$a+$b]表达式形式,其中$a$b为整型 ~~~ [luo@LNMP-CenOS-6.5 ~] $ expr $[12+332] 344 [luo@LNMP-CenOS-6.5 ~] $ expr $[12-332] -320 [luo@LNMP-CenOS-6.5 ~] $ expr $[12*332] 3984 ~~~ ## bc命令支持对浮点数计算(以上其他的都无法计算) ~~~ [luo@LNMP-CenOS-6.5 ~] $ echo 1+32 1+32 [luo@LNMP-CenOS-6.5 ~] $ echo 1+32|bc 33 [luo@LNMP-CenOS-6.5 ~] $ echo 1.2+213.2|bc 214.4 ~~~ ## $[]用法 ~~~ [luo@LNMP-CenOS-6.5 ~] $ echo $[12+21] 33 ~~~