vincen 发表于 2018-8-19 14:49:43

Linux shell编程(三)算术运算

  例如:
  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=$((m1))
  等于把值缩小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=$
  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'

页: [1]
查看完整版本: Linux shell编程(三)算术运算