目录
shell运算
1.1 基本运算法则
四则运算
- 加法:num1 + num2
- 减法:num1 - num2
- 乘法:num1 * num2
- 整除:num1 / num2
取余运算
- 求模:num1 % num2
1.2 运算表达式
使用$[]或$(())表达式
[root@localhost ~]# echo $[1+8]
9
[root@localhost ~]# echo $[2*6]
12
[root@localhost ~]# echo $[12-8]
4
[root@localhost ~]# echo $[11/3]
3
[root@localhost ~]# echo $[11%3]
2
[root@localhost ~]# x=2
[root@localhost ~]# y=3
[root@localhost ~]# echo $[x+y]
5
[root@localhost ~]# echo $[x*y]
6
[root@localhost ~]# echo $((x*y))
6
[root@localhost ~]#
1.3 变量的自增/自减等操作
简写表达式 | 完整表达式 |
i++ | i=i+1 |
i-- | i=i-1 |
i+=2 | i=i+2 |
i-=2 | i=i-2 |
i*=2 | i=i*2 |
i/=2 | i=i/2 |
i%=2 | i=i%2 |
[root@localhost ~]# x=2
[root@localhost ~]# echo $[x+=4]
6
[root@localhost ~]# echo $x
6
[root@localhost ~]# echo $[x*=3]
18
[root@localhost ~]# echo $x
18
[root@localhost ~]#
1.4 let
不返回结果,需要借助echo
[root@localhost ~]# let i=2*3 #不显示结果,需要借助echo命令
[root@localhost ~]# echo $i
6
[root@localhost ~]# let i=2+3
[root@localhost ~]# echo $i
5
[root@localhost ~]# let i+=3 #也支持简写
[root@localhost ~]# echo $i
8
[root@localhost ~]# let i/=2;echo $i #使用;可以在一行操作
4
[root@localhost ~]#
1.5 小数运算 bc
bash内建机制仅支持整数运算,不支持小数运算
我们可以通过计算器软件bc实现小数运算
- 如果没有该软件需要yum安装
- bc支持交互式和非交互式两种方式,scale=n可以约束小数位
- 支持比较操作符:>、>=、<、<=、==、!=
#非交互式运算,使用管道传给bc
[root@localhost ~]# echo "1.2+2.3;2.3*2.5"|bc
3.5
5.7
[root@localhost ~]# echo "scale=2;1.2+2.3;2.3*2.5"|bc #当需要指定小数位数时,scale写在前面
3.5
5.75
[root@localhost ~]# echo "scale=2;9/3"|bc
3.00
1.6 expr
expr命令的英文全称是“expression”,即是表达式的意思,作用是一个命令行的计数器,常用于在UNIX/LINUX系统中求表达式变量的值,一般用于整数值,也可用于字符串
expr不可计算小数,并且变量和运算符之间需要空格分隔
常用参数:
空格 | 隔开每个项 |
\(反斜杠) | 放在 shell 特定的字符前面 |
“”(引号) | 对包含空格和其他特殊字符的字符串要用引号括起来 |
#计算字符串的长度
[root@localhost ~]# expr length "this is a test"
14
#抓取字符串
[root@localhost ~]# expr substr "this is a test" 3 5
is is
#抓取第一个字符数字串出现的位置
[root@localhost ~]# expr index "sarasara" a
2
#整数运算:
[root@localhost ~]# expr 14 % 9
5
[root@localhost ~]# expr 30 / 3 / 2
5
#使用expr进行四则运算:
#注意:使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义
[root@localhost ~]# expr \( 10 + 10 \) \* 2 + 100
140
1.7 seq
seq命令用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式、宽度、分割符号进行控制
常用参数:
-f | 格式 |
-s | 字符串 |
-w | 在列前添加0 使得宽度相同 |
#产生5以内的整数:
[root@localhost ~]# seq 5
1
2
3
4
5
#产生98~101之间的整数,并且要求数字之间的分隔符为”:::”:
[root@localhost ~]# seq -s ":::" -f "%03g" 98 101
098:::099:::100:::101
小贴士
生成一个20以内的随机数
[root@localhost ~]# expr $[RANDOM % 20 + 1]
10
[root@localhost ~]# echo $[RANDOM % 20 + 1]
4
总结
默认bash仅支持整数运算
可以借助bc计算器进行小数运算