例如:
echo $((${j:-8}+2))
如果变量j不存在或空值,则${j:-8}展开的结果为8,再和2做加法运算,得10
例如:
echo $((k+4))
如果变量k不存在或空值,其值为0+4=4
一.算术扩展
算术扩展的语法是:$((表达式))
例如:
unset i
echo $((12+$i))
如果表达式内有变量,该变量名称之前最好不要加上$这个符号
由于变量i不存在,结果就变为12+
如果写成:echo $((12+i)),这样可正确执行。
如果表达式中有“变量扩展”,则要加上$
例如:$((${j:-8}+2))
各种简单的算术运用:
r=$((6+5)) r的值为11
r=$((6*5)) r的值为30
r=$((2**5)) r的值为32 (2的5次方)
递增 1
r=6
r=$((++r))
echo $r
结果为7。 (r值加1后,在赋值给r)
递减 1
r=6
r=$((--r))
echo $r
结果为5. (r值减1后,在赋值给r)
运算后减 1
m=6
r=$((4+m--))
m值先代入6,和4做运算,得值为10,在赋值给r。接着m的值减1,结果为:r=10 m=5
位左移
m=16
r=$((m<<1))
m值代入16,以二进制的方式向左移一位,等于把值放大两倍,结果为:32
位右移
m=16
r=$((m>>1))
等于把值缩小2倍,结果为:8
i=168
((i+=60))
i+=60的意思同于i=i+60,即i加上60后,把运算结果赋值给i,i的值变成228
((i-=60))的意思同于i=i-60
((i/=2))的意思同于i=i/2
(())的用法和let的效果是一样的,例如((i++))和let "i++"执行结果相同
二. 使用$[]做算术运算
使用$[]做算术运算和$(())类似
语法:r=$[算术式]
r=5
r=$[r+1]
echo $r
结果为:6
三. 使用内置命令declare、let做算术运算
declare -i I
I=8+16
echo $I
使用declare事先设定变量I的属性为“整数”
由于I是整数,8+16就不再是字符串,而是一个算式,结果为:24
必须特别留意的是:
算式中,运算符和操作数之间不可以有空格,要紧密连接
特殊符号不必使用\转义
算式中,可包含其他变量,变量之前不必加$
使用declare -i 设定变量后,加减乘除等运算就非常直观了
declare -i I
I=8+16
I=16-8
I=5*3
I=22/5
I=2**3
let的用法
例如:let I=8+16
let I=22/5
let I='16-8'