1. 程式人生 > 其它 >shell指令碼-算數運算

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