整数运算(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 id

declare -ir PPID="235"   # parent process id

declare -ir UID="15"      # user id

用不同的基数表示数字 数字可以用不同基数形式表示,包括十进制(默认时基数为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