一. 双小括号数字运算(())
可以用来数值运算和数值比较,但只支持整数类型
1)没有未知数,直接输出运算表达式结果
[root@db01 ~]# echo $((7*5))
35
如果是浮点数或字符串,就会报错
[root@db01 ~]# echo $((7.5*5))
-bash: 7.5*5: syntax error: invalid arithmetic operator (error token is ".5*5")
2)没有未知数,进行数值的比较
如果结果是正确的,则表示真,会输出1
如果结果是错误的,则表示假,会输出0
[root@db01 ~]# echo $((5>2))
1
[root@db01 ~]# echo $((20>=20))
1
[root@db01 ~]# echo $((5>20))
0
[root@db01 ~]# echo $((5>2.5))
-bash: 5>2.5: syntax error: invalid arithmetic operator (error token is ".5")
补充:&&表示“与”的作用,前者与后者都为真,整体结果才是真,输出1
符号||表示“或”的作用,前者与后者只要有一个为真,整体结果就是真,输出1
[root@db01 ~]# echo $((20>=20&&1>8))
0
[root@db01 ~]# echo $((20>=20||1>8))
1
3)含未知数的数值计算
简单的对变量赋值运算
[root@db01 ~]# ((a=3))
[root@db01 ~]# ((a++))
[root@db01 ~]# echo $a
4
[root@db01 ~]# b=$((7/3+4**2))
[root@db01 ~]# echo $b
18
[root@db01 ~]# c=13
[root@db01 ~]# echo $((++c))
14
注意:此处的a++表示先给a赋值,再进行(a+1)的运算
而++a则表示先进行(a+1)的运算,再给a赋值
一般在Linux或shell编程中区分意义不大。
二. let运算命令
本命令也是只适用于整数的字符类型
首先取消在上文测试所设置的临时环境变量
unset a b c
使用let命令进行测试
[root@db01 ~]# x=30
[root@db01 ~]# let x=x**2
[root@db01 ~]# echo $x
900
此处的let x=x**2等价于((x**2)),但后者运算效率更高
三. expr命令
该命令适用于整数类型和字符串长度的匹配运算
1)不含未知数的简单运算
[root@db01 ~]# expr 2 \* 3
6
[root@db01 ~]# expr 2 / 3
0
在使用expr命令时,两个元素与运算符号直接要有空格符号隔开;
此外,expr命令的乘法需要转义符号。
2)含未知数(变量)的运算
[root@db01 ~]# k=`expr 4 + 3`
[root@db01 ~]# echo $k
7
[root@db01 ~]# h=$(expr 5 + 3)
[root@db01 ~]# echo $h
8
将命令执行的结果赋值给变量,有上述两种方法。
分别是反引号 Linux命令 反引号和$(Linux命令),在shell脚本中也可使用。
3)计算字符串的长度
在计算字符串长度的时候,变量必须用双引号括住,并且字符串中的每一个空格也占用一个单位的长度。
[root@db01 ~]# str="hello world"
[root@db01 ~]# expr length "$str"
11
如果格式错误,计算结果也会有差异。下面是错误案例。
[root@db01 ~]# str="hello world
[root@db01 ~]# expr length $"str"
3
[root@db01 ~]# expr length '$str'
4
四. bc命令
可以计算整数,也可计算浮点数(小数)的字符类型
首先检查Linux系统中是否有bc命令,如果没有,则先安装软件
yum install -y bc
1)交互式运算
在命令行输入bc后直接进行加减乘除四则运算
[root@db01 ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3+2
5
10*2
20
10/3
3
2)非交互式无变量运算
[root@db01 ~]# echo 3.14 + 6.28|bc
9.42
保留3位小数的运算
[root@db01 ~]# echo "scale=3;19/7"|bc
2.714
3)非交互式含变量运算
[root@db01 ~]# p=14
[root@db01 ~]# p=$(echo $p*3|bc)
[root@db01 ~]# echo $p
42
五. $[]命令运算
只支持整数数字类型运算
[root@db01 ~]# echo $[3**3]
27
[root@db01 ~]# s=13
[root@db01 ~]# s=$[s/3]
[root@db01 ~]# echo $s
4
六. awk运算
可以计算整数和浮点数
[root@db01 ~]# echo "22.98 4.23"|awk '{print ($1+3)/$2}'
6.14184
参考书籍:
<<跟老男孩学Linux运维:Shell编程实战>>