例如:

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'