整数运算(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
转载于:https://blog.51cto.com/520eden/575093