shell中进行整数运算需要借助一些辅助工具,如:expr、declare、let、(( ))、$[ ]
1、expr有很多不完善之处,此处不写。
2、declare:
declare -i 命令定义整形变量,当使用此命令对变量赋值后,变量便可进行算术运算。
需要注意的是:
如果给整形变量赋值的是一个字符串值,则bash会将变量赋值为0。
使用declare -i命令生成的变量执行算术运算时,各变量之间不能有空格。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
[email protected]:~$ declare -i m n[email protected]:~$ m=1[email protected]:~$ n=2[email protected]:~$ m+=1[email protected]:~$ n+=2[email protected]:~$ echo $m $n2 4[email protected]:~$ m=m+n[email protected]:~$ echo $m6新声明一个整形变量d,进行计算[email protected]:~$ declare -i d[email protected]:~$ d=m+n[email protected]:~$ echo $d10使用一个未声明为整形的变量c,进行计算[email protected]:~$ c=m+n[email protected]:~$ echo $cm+n使用双引号:[email protected]:~$ a=3[email protected]:~$ b=2[email protected]:~$ m="a+ b "[email protected]:~$ echo $m5 |
直接执行declare -i 命令可以查看已经定义的整形变量
|
1
2
3
4
5
6
7
|
[email protected]:~$ declare -i……declare -ir UID="1000"declare -i a="8"declare -i d="10"declare -i m="6"declare -i n="4" |
使用declare -i 命令声明变量后还可以用不同进制的数字表示十进制数
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
第一种写法:[email protected]:~$ declare -i m[email protected]:~$ m=2#101[email protected]:~$ echo $m5[email protected]:~$ m=8#17[email protected]:~$ echo $m15[email protected]:~$ m=16#b[email protected]:~$ echo $m11第二种写法:[email protected]:~$ declare -i n=017 其中017中的0代表八进制[email protected]:~$ echo $n15 |
3、let: let是bash shell的一个内建命令。可以help let查看帮助
|
1
2
3
4
5
6
7
|
[email protected]:~$ i=5[email protected]:~$ let i=i+1[email protected]:~$ echo $i6[email protected]:~$ let "i = i + 2"[email protected]:~$ echo $i8 |
需要注意的是: 使用let时,如果运算表达式没有使用双引号,则表达式之间不能有空格;如果使用了双引号,则表达式之间可以有空格。
建议使用双引号。
4、(( )) :let也可以用(( ))替换
|
1
2
3
4
5
6
7
8
9
10
|
[email protected]:~$ i=3[email protected]:~$ ((i+=2))[email protected]:~$ echo $i5[email protected]:~$ (( i+= 2))[email protected]:~$ echo $i7[email protected]:~$ (( "i+= 2" ))[email protected]:~$ echo $i9 |
(( ))还可以直接一步出结果,有无空格无影响。双括号中不可以使用变量
|
1
2
3
|
5、$[ ] 中括号中有无空格无影响。中括号中可以使用变量
|
1
2
3
4
5
6
7
8
|
[email protected]:~$ var=$[1+ 2 ][email protected]:~$ echo $var3[email protected]:~$ echo $[3+2]5[email protected]:~$ m=2[email protected]:~$ echo $[$m +1 ]3 |
常见运算符号:
let使用双引号时支持:
+ - * / % >> << & ^ | > < = 以及这些符号与=号结合的符号。并且还支持 == 和 !=。即支持上述图中常见运算符
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[email protected]:~$ echo $m $n7 2[email protected]:~$ let "c=m==n"[email protected]:~$ echo $c0[email protected]:~$ let "c=m!=n"[email protected]:~$ echo $c1[email protected]:~$ let "c=(3>2) || (4<= 1 )"[email protected]:~$ echo $c1[email protected]:~$ let "c=(3>2) && (4<= 1 )"[email protected]:~$ echo $c0[email protected]:~$ let "c=(3<2) || (4<= 1 )"[email protected]:~$ echo $c0 |
(( ))等同于let
$[] 支持
+ - * / % >> << & ^ | > < = 以及这些符号与=号结合的符号。并且还支持 == 和 !=。即支持上述图中常见运算符
|
1
2
3
4
|
declare -i声明整型变量后,需要使用双引号支持。
+ - * / % >> << & ^ | > < = 以及这些符号与=号结合的符号。并且还支持 == 和 !=。即支持上述图中常见运算符
|
1
2
3
4
5
6
7
|
[email protected]:~$ declare -i m[email protected]:~$ m="(3>2) || (4<= 1 )"[email protected]:~$ echo $m1[email protected]:~$ m="(3<2) || (4<= 1 )"[email protected]:~$ echo $m0 |
总结:
1、declare -i声明整型变量后,变量运算最好使用双引号。
2、let 进行算术运算最好也使用双引号。
3、(()) 等同于let,不需要使用双引号
4、$[] 不需要使用双引号
上面4中算术运算辅助符,按照总结的使用说明时,在双引号和括号中的表达式有无空格都无影响,最好统一不带空格。
都支持:+ - * / % >> << & ^ | > < = 以及这些符号与=号结合的符号。并且还支持 == 和 !=。即支持上述图中常见运算符
本文转自 f_066 51CTO博客,原文链接:http://blog.51cto.com/ganmu/1961520,如需转载请自行联系原作者