变量的数值计算常用的有如下几个命令:
-
(())用法:
如果要执行简单的整数运算,只需要特定的算术表达式用"$(("和"))"括起来即可
shell的算术运算符号常置于"$(("......"))"的语法中。这一语法如同双引号功能,除了内嵌双引号无需转义
运算符 | 意义 |
++ -- | 增加及减少,可前置也可放在结尾 |
+ - ! ~ | 一元的正号与负号;逻辑与位的取反 |
* / % | 乘法,除法,与取余 |
+ - | 加法,减法 |
<<= >> = | 比较符号 |
== !== | 相等与不相等 |
<< >> | 向左位移 向右位移 |
& | 位的AND |
^ | 位的异或 |
| | 位的或 |
&& | 逻辑的AND |
|| | 逻辑的OR |
?: | 条件表达式 |
= += -= *= /= %= &= ^= <<= >>= |= |
赋值运算符a+=1 都相当a=a+1 |
范例1:shell的算术运算实例如下:
1
2
3
4
5
6
7
8
|
[root@XCN ~]
# ((a=1+2**3-4%3))
[root@XCN ~]
# echo $a
8
[root@XCN ~]
# b=$((a=1+2**3-4%3))
[root@XCN ~]
# echo $b
8
[root@XCN ~]
# echo $((a=1+2**3-4%3))
8
|
提示:上面是三种不同的变量计算定义和使用的方式
1
2
3
4
5
6
7
8
9
10
|
[root@XCN ~]
# echo $((a+=1)) #相当a=a+1
9
[root@XCN ~]
# echo $((a++))
9
[root@XCN ~]
# echo $((a--))
10
[root@XCN ~]
# echo $((3>2)) #比较大小
1
[root@XCN ~]
# echo $((3<2)) #比较大小
0
|
提示:
-
**为幂运算:%为取模运算(就是除法当中取余数),加减乘除
-
上面涉及到的参数变量必须为整数(整型),不能是小数(符点数)或者字符串后面的bc命令可以进行浮点数运算,但一般较少用到,下文会讲解。提醒下,你可以直接在shell脚本中使用上述命令进行计算。
-
echo ((a++))和echo((a--))表示先输出a自身的值,然后在进行++--的运算,echo $((++a)和
$((--a))表示先进行++ --的运算,在输出a自身的值
记忆方法:变量a在前,表达式的值为a,然后a自增或自减,变量a在符号后,表达式值自增或自减,然后a值自增或自减
范例2:--,++在变量前后的举例理解:
1
2
3
4
|
[root@XCN ~]
# echo $((3--2))
5
[root@XCN ~]
# echo $((3==2))
0
|
范例3:定义变量计算的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@XCN ~]
# xcn=99
[root@XCN ~]
# echo $(($xcn + 1))
100
[root@XCN ~]
# echo $(( $xcn + 1 ))
100
[root@XCN ~]
# xcn=$(( $xcn + 1 )) #还可以赋值给变量然后输出变量
[root@XCN ~]
# echo $xcn
100
#提示(())中的变量也可以去掉$符号
[root@XCN ~]
# unset xcn
[root@XCN ~]
# xcn=99
[root@XCN ~]
# echo $((xcn+1))
100
|
范例4:各种(())的计算命令行执行例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@XCN ~]
# echo $((100/5)) #除法 取商数
20
[root@XCN ~]
# echo $((100/5))
20
[root@XCN ~]
# echo $((100+5))
105
[root@XCN ~]
# echo $((100*5))
500
[root@XCN ~]
# echo $((100-5))
95
[root@XCN ~]
# echo $((100**5)) #幂
10000000000
[root@XCN ~]
# echo $((100%5)) #取模,余数
0
|
范例5:各种(())运算的shell脚本例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/bin/bash
a=6
b=2
echo
"a-b =$(($a-$b))"
echo
"a+b =$(($a+$b))"
echo
"a*b =$(($a*$b))"
echo
"a/b =$(($a/$b))"
echo
"a**b =$(($a**$b))"
echo
"a%b =$(($a%$b))"
执行结果如下:
[root@XCN day2]
# sh jisuan.sh
a-b =4
a+b =8
a*b =12
a
/b
=3
a**b =36
a%b =0
|
范例6:实践考试题,内容如下:
把a,b两个变量通过命令行脚本传参的方式实现上面混合运算脚本的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
a=$1
b=$2
echo
"a-b =$(($a-$b))"
echo
"a+b =$(($a+$b))"
echo
"a*b =$(($a*$b))"
echo
"a/b =$(($a/$b))"
echo
"a**b =$(($a**$b))"
echo
"a%b =$(($a%$b))"
执行结果如下:
[root@XCN day2]
# sh jisuan.sh 6 2
a-b =4
a+b =8
a*b =12
a
/b
=3
a**b =36
a%b =0
|
本文转自 baishuchao 51CTO博客,原文链接:http://blog.51cto.com/baishuchao/1940261