team470 发表于 2018-8-24 10:24:15

shell 之 算术运算

整数运算(declare和let命令)
  declare命令 可以用declare –i命令定义整型变量。如果给整型变量赋一个字符串值,则bash将把变量赋值为0。可以对已定义的整型变量执行算术运算(如果变量未被定义为整型变量, 内置的let命令也允许算术操作。见本节let命令部分)。如果给整型变量赋一个浮点数值,则bash将报告语法错误。数字可以用不同基数的数字表示,如 二进制数,八进制数或十六进制数。
  范例14-6
  1   $ declare –i num
  2   $ num=hello
  $ echo $num
  0
  3   $ num=5 + 5
  bash: +: command not found
  4   $ num=5+5
  $ echo $num
  10
  5   $ num=4*6
  $ echo $num
  24
  6   $ num="4 * 6"
  $ echo $num
  24
  7   $ num=6.5
  bash: num: 6.5: syntax error in expression (remainder of expression
  is ".5")
  说明
  1. 带-i选项的declare命令创建一个整型变量num。
  2. 试着将字符串“hello”赋值给变量num,结果变量的值为0。
  3. 如果没有使用let命令,就必须把空白符放在引号中或者删掉。
  4. 删掉空白符后,运算正确执行。
  5. 执行乘法运算,并把结果赋给变量num。
  6. 把空白符放在引号中,则乘法运算可以执行,并阻止shell展开通配符(*)。
  7. 由于变量设置为整型,赋值时给了一个带小数点的数,导致bash报告语法错误。
  列出整型变量 只带一个-i参数的declare命令将列出所有已设置的整型变量及其值,如下所示:
  $ declare –i

  declare -ir EUID="15"    # effective user>
  declare -ir PPID="235"   # parent process>
  declare -ir UID="15"      # user>  用不同的基数表示数字 数字可以用不同基数形式表示,包括十进制(默认时基数为10),八进制(基数为8),十六进制(基数为16),另外,基数可以是2~36之间的任意整数。
  格式
  variable=base#number-in-that-base
  范例14-7
  n=2#101      # Base is 2; number 101 is in base 2
  范例14-8
  (命令行)
  1 $ declare -i x=017
  $ echo $x
  15
  2 $ x=2#101
  $ echo $x
  5
  3 $ x=8#17
  $ echo $x
  15
  4 $ x=16#b
  $ echo $x
  11
  说明
  1. declare命令用来为整型变量x赋一个八进制的值017。八进制数字必须以一个0开头。本例中输出八进制数017的十进制值:15。
  2. 变量x被赋值为二进制数101,2代表基数,用#隔开,后面是二进制的数值101。x的十进制值为5。
  3. 变量x赋值为八进制值017,x的十进制值为15。
  4. 变量x赋值为十六进制值b,x的十进制值为11。
  let命令 let命令是bash shell内置命令,用来执行整型算术运算和数值表达式测试。可用命令help let查看当前bash版本支持的let操作符,参见14.5.2一节中的表14-4。
  范例14-9
  (命令行)
  1   $ i=5 or let i=5
  2   $ let i=i+1
  $ echo $i
  6
  3   $ let "i = i + 2"
  $ echo $i
  8
  4   $ let "i+=1"
  $ echo $i
  9
  5   $ i=3
  6   $ (( i+=4))
  $ echo $i
  7
  7   $ (( i=i-2 ))
  $ echo $i
  5
  说明
  1. 变量i被赋值为5。
  2. let命令给变量i加1。在执行算术运算时,不需要用美元符来展开变量。
  3. 如果参数包括空白符,则需要使用引号。
  4. 简写的操作符+=,用来给变量i加1。
  5. 变量i被赋值为5。
  6. 双括号可以用来代替let命令⑤。变量i的值加4。
  7. i的值减2。也可以写作i-=2。
14.3.2 浮点数运算
  bash只支持整型运算,但可以使用bc,awk和nawk工具来处理更复杂的运算。
  范例14-10
  (命令行)
  1   $ n=`echo "scale=3; 13 / 2" | bc`
  $ echo $n
  6.500
  2   product=`gawk -v x=2.45 -v y=3.123 'BEGIN{printf "%.2f\n",x*y}'`
  $ echo $product
  7.65
  说明
  1. echo命令的输出通过管道传送给bc程序。变量scale赋值为3,表示小数点后的有效位数为3。计算13除以2的值,整个管道用反引号括起来。第二行中将执行命令替换,输出的值赋给变量n。
  2. 通过命令行传递参数列表,gawk从该列表中获取参数值:x=2.45,y=3.123。乘法运算完成后,printf函数格式化并显示运算结果,保留小数点后两位数,并将输出赋给变量product。
  转自: http://book.csdn.net/bookfiles/382/10038214294.shtml

页: [1]
查看完整版本: shell 之 算术运算