目录
shell运算
1.1 基本运算法则
1.2 运算表达式
1.3 变量的自增/自减等操作
1.4 let
1.5 小数运算 bc
1.6 expr
1.7 seq
小贴士
总结
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计算器进行小数运算