码迷,mamicode.com
首页 > 其他好文 > 详细

算术运算符——整数运算

时间:2017-08-31 22:24:28      阅读:343      评论:0      收藏:0      [点我收藏+]

标签:shell

shell中进行整数运算需要借助一些辅助工具,如:expr、declare、let、((  ))、$[  ]

1、expr有很多不完善之处,此处不写。

2、declare:

    declare -i 命令定义整形变量,当使用此命令对变量赋值后,变量便可进行算术运算。

    需要注意的是:

    如果给整形变量赋值的是一个字符串值,则bash会将变量赋值为0。

    使用declare -i命令生成的变量执行算术运算时,各变量之间不能有空格。

test@kickseed:~$ declare -i m n
test@kickseed:~$ m=1
test@kickseed:~$ n=2
test@kickseed:~$ m+=1
test@kickseed:~$ n+=2
test@kickseed:~$ echo $m $n
2 4
test@kickseed:~$ m=m+n
test@kickseed:~$ echo $m
6

新声明一个整形变量d,进行计算
test@kickseed:~$ declare -i d
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 -ir UID="1000"
declare -i a="8"
declare -i d="10"
declare -i m="6"
declare -i n="4"

    使用declare -i 命令声明变量后还可以用不同进制的数字表示十进制数

第一种写法:
test@kickseed:~$ declare -i m
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 -i n=017   其中017中的0代表八进制
test@kickseed:~$ echo $n
15


3、let: let是bash shell的一个内建命令。可以help let查看帮助

test@kickseed:~$ i=5
test@kickseed:~$ let i=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








本文出自 “甘木” 博客,请务必保留此出处http://ganmu.blog.51cto.com/9305511/1961520

算术运算符——整数运算

标签:shell

原文地址:http://ganmu.blog.51cto.com/9305511/1961520

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!