shell中进行整数运算需要借助一些辅助工具,如:expr、declare、let、(( ))、$[ ]
1、expr有很多不完善之处,此处不写。
2、declare:
declare -i 命令定义整形变量,当使用此命令对变量赋值后,变量便可进行算术运算。
需要注意的是:
如果给整形变量赋值的是一个字符串值,则bash会将变量赋值为0。
使用declare -i命令生成的变量执行算术运算时,各变量之间不能有空格。
test@kickseed:~$declare-imn test@kickseed:~$m=1 test@kickseed:~$n=2 test@kickseed:~$m+=1 test@kickseed:~$n+=2 test@kickseed:~$echo$m$n 24 test@kickseed:~$m=m+n test@kickseed:~$echo$m 6 新声明一个整形变量d,进行计算 test@kickseed:~$declare-id test@kickseed:~$d=m+n test@kickseed:~$echo$d 10 使用一个未声明为整形的变量c,进行计算 test@kickseed:~$c=m+n test@kickseed:~$echo$c m+n
直接执行declare -i 命令可以查看已经定义的整形变量
test@kickseed:~$declare-i …… declare-irUID="1000" declare-ia="8" declare-id="10" declare-im="6" declare-in="4"
使用declare -i 命令声明变量后还可以用不同进制的数字表示十进制数
第一种写法: test@kickseed:~$declare-im test@kickseed:~$m=2#101 test@kickseed:~$echo$m 5 test@kickseed:~$m=8#17 test@kickseed:~$echo$m 15 test@kickseed:~$m=16#b test@kickseed:~$echo$m 11 第二种写法: test@kickseed:~$declare-in=017其中017中的0代表八进制 test@kickseed:~$echo$n 15
3、let: let是bash shell的一个内建命令。可以help let查看帮助
test@kickseed:~$i=5 test@kickseed:~$leti=i+1 test@kickseed:~$echo$i 6 test@kickseed:~$let"i=i+2" test@kickseed:~$echo$i 8
需要注意的是: 使用let时,如果运算表达式没有使用双引号,则表达式之间不能有空格;如果使用了双引号,则表达式之间可以有空格。
建议使用双引号。
4、(( )) :let也可以用(( ))替换
test@kickseed:~$i=3 test@kickseed:~$((i+=2)) test@kickseed:~$echo$i 5 test@kickseed:~$((i+=2)) test@kickseed:~$echo$i 7 test@kickseed:~$(("i+=2")) test@kickseed:~$echo$i 9
(( ))还可以直接一步出结果,有无空格无影响。双括号中不可以使用变量
souche@kickseed:~$i=2 souche@kickseed:~$echo$((i+=3)) 5
5、$[ ] 中括号中有无空格无影响。中括号中可以使用变量
test@kickseed:~$var=$[1+2] test@kickseed:~$echo$var 3 test@kickseed:~$echo$[3+2] 5 test@kickseed:~$m=2 test@kickseed:~$echo$[$m+1] 3
let使用双引号时支持:
+ - * / % >> << & ^ | > < = 以及这些符号与=号结合的符号。
并且还支持 == 和 !=
test@kickseed:~$let"c=m==n" test@kickseed:~$echo$c 0 test@kickseed:~$let"c=m!=n" test@kickseed:~$echo$c 1