算数运算
在Bash中可以使用let,(()),$(())或者$[]进行基本的整数运算,还可以使用bc进行高级运算,包括小数运算,还可以使用expr命令进行整数运算,还能判断参数是否为整数
注意:let和(())几乎完全等价,除了做数学运算,还支持数据表达式判断,例如数值a是否等于3
let a==3或((a==3)),但一般不用,我们用test命令来做,test '$a' -eq 3
num=10
let num=num+10 #等价于 let num+=10
let num=num-10 #等价于 let num-=10
echo $num
let可以使用(())进行替换,如果最后一个算数表达式的结果为0,则返回状态码1,否则返回0
$(())或者$[]
num=10
echo $((num+=6))
echo $[num-=16]
此操作也可以为变量赋值
num=$((num-=10));echo $num
num=$[num-=6];echo $num
在算数计算过程中,等号右边的变量可以带着$符号,但等号左边的变量不允许带$符号
let num=#num-1 == let num=num-1
num=$(($num-1)) == num=$((num-1))
$((num=$num-1)) == $((num=num-1)) != $(($num=num-1))
#
$((x+y)) 加法运算 echo $((1+2))
$((x-y)) 减法运算 echo $((1-2))
$((x*y)) 乘法运算 echo $((1*2))
$((x/y)) 触发运算(取商) echo $((8/6))
$((x%y)) 取余运算 echo $((5%3))
$((x++)) 自加运算 echo $((9++))
$((x--)) 自减运算 echo $((9--))
$((x**y)) 幂运算 echo $((3**3))
运算:
1++ --1
shell变量可以自增自减,‘++’,‘--’变量自动加一或者减一,
位置不同,导致最终的结果不同
x++ 先返回结果,在加1
++x 先执行加1,在返回结果
x-- 先返回结果,在减一
--x 先减一,在返回结果
x=10;echo $((x++));echo $x
10
11
x=10;echo $((++x));echo $x
11
11
在使用自增自减变量赋值时,需注意赋值是否立即生效
x=10;y=$((x++));echo $y;echo $y
10
10
因为y=$((x++))赋值给y是加一之前的值,虽然赋值结束,$((x++))变为11,但此值和y无关
x=10;y=$((++x));echo $y;echo $y
#常用的运算方法:
let i=i-1
let i=$i-1
let i-=1
i=$((i-1))
i=$(($i-1))
i=$[i-1]
i=$[$i-1]
数组也可以进行数学运算
数组实质是变量,可以支持自增自减操作
变量内存空间是随机的,而数组内存空间是顺序的
arr_text[0]=10
let arr_text[0]=${arr_text[0]}-1;echo ${arr_text[0]}
let arr_text[0]-=1
[root@localhost ~]# echo $((arr_text[0]++))
8
[root@localhost ~]# echo $((++arr_text[0]))
10
[root@localhost ~]# echo $((arr_text[0]++));echo ${arr_text[0]}
10
11
[root@localhost ~]# echo $((++arr_text[0]))
12
[root@localhost ~]#
expr(简述加减运算)
#注意:运算符与数值之间有空格隔开
expr arg1 + arg2 加法
expr arg1 - arg2 减法
expr arg1 \* arg2 乘法
expr arg1 / arg2 除法
expr arg1 % arg2 取余
bc命令高级算数运算
bc可用于浮点数的计算,bc为linux中的计算器,功能丰富,“强大的让人吐血”
支持自定义变量,支持自定义函数,支持逻辑运算,支持科学计算
bc
[root@localhost ~]# bc -q
pie=3.1415926
r=3
pie*r*r #乘法
28.2743334
pie*r^2 #代表幂次方
28.2743334
pie*r^3
84.8230002
quit #退出
#bc支持自增自减运算
root@localhost ~]# bc -q
r=3
r++
3
++r
5
--r
4
r++
4
#人性化操作(批处理)
var=`echo "option1;option2;…………;expression"|bc`
options:一般设置精度(scale),变量赋值 #只对除法,取余,幂运算有效
expression:计算表达式
#计算圆的面积
area=`echo "scale=2;r=3;3.14*r*r"|bc`
echo $area
#bc接受使用here string和here document接受参数,最常用放置在脚本中;
[root@localhost ~]# cat yuan.sh
#!/bin/bash
#bc for here string
#计算圆的面积
var1=haha
var2=hahaha
area=`bc<<EOF
scale=2
r=3
3.1415*r*r
EOF`
echo $area
[root@localhost ~]# bash yuan.sh
# 补0操作
例如 0.1+0.1=0.2 不会显示0.2,只是显示.2
echo 0`echo "0.1+0.1"|bc`
printf "%.2f\n" `echo "0.1+0.1"|bc`