shell指令碼-算數運算
阿新 • • 發佈:2022-01-05
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 $i30 [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