shell脚本-算数运算
Shell允许在某些情况下对算术表达式进行求值,比如:let和declare内置命令,(())复合命令和算术扩展。求值以固定宽度的整数进行,不检查溢出,尽管除以0被困并标记为错误。运算符及其优先级,关联性和值与C语言相同,以下运算符列表分组为等优先级运算符级别。级别按降序排列优先。
注意:bash只支持整数,不支持小数
乘法符号有些场景中需要转义
实现算数运算:
- let var=算数表达式
- ((var=算数表达式)) 和上面等价
- var=$[算数表达式]
- var=$((算数表达式))
- var=$(expr arg1 arg2 arg3 ...)
- declare -i var = 数值
- echo '算数表达式' | bc
内建的随机数生成器变量:
$RANDOM 取值范围:0-32767
范例:
#生成 0 - 49 之间随机数 echo $[$RANDOM%50] #随机字体颜色 [root@CentOS7 ~]# echo -e "\033[1;$[RANDOM%7+31]mhello\033[0m" hello
增强型赋值:
+= i+=10 相当于i=i+10 -= i-=j 相当于i=i-j *= /= %= ++ i++,++i 相当于i=i+1 -- i--,--i 相当于i=i-1
格式:
let varOPERvalue
例1:
[root@CentOS7 ~]# let i=10*2 [root@CentOS7 ~]# echo $i 20 [root@CentOS7 ~]# ((j=i+10)) [root@CentOS7 ~]# echo $j 30
例2:
#自加3后自赋值 let count+=3 [root@CentOS7 ~]# i=10 [root@CentOS7 ~]# let i+=20 #相当于let i=i+20 [root@CentOS7 ~]# echo $i 30 [root@CentOS7 ~]# j=20 [root@CentOS7 ~]# let i*=j [root@CentOS7 ~]# echo $i 600
例3:
#自增,自减 let var+=1 let var++ let var-=1 let var-- [root@CentOS7 ~]# unset i j ; i=1; let j=i++;echo "i=$i,j=$j" i=2,j=1 [root@CentOS7 ~]# unset i j ; i=1; let j=++i;echo "i=$i,j=$j" i=2,j=2
例4:
[root@CentOS7 ~]# expr 2 \* 3 #这里*需要用\转义 6
例5:
[root@CentOS7 ~]# echo "scale=3;20/3"|bc 6.666
例6:
[root@CentOS7 ~]# i=10;j=20;declare -i result=i*j;echo $result 200
例7:今有雉兔同笼,上有35头,下有94足,问雉兔各几何?
[root@CentOS7 ~]# cat chook_rabbit.sh #!/bin/bash # #************************************************************************************* #Author: wanghaomiao #QQ: 1074035975 #Date: 2022-01-05 #FileName chook_rabbit.sh #URL: www.wanghaomiao.com.cn #Description: The test script #Copyreght (C): 2022 All rightsreserved #************************************************************************************* HEAD=$1 FOOT=$2 ((RABBIT=(FOOT-HEAD-HEAD)/2)) ((CHOOK=HEAD-RABBIT)) #PABBIT=$(((FOOT-HEAD-HEAD)/2)) #CHOOK=$[HEAD-RABBIT] echo RABBIT:$RABBIT echo CHOOK:$CHOOK [root@CentOS7 ~]# bash chook_rabbit.sh 35 94 RABBIT:12 CHOOK:23