shell 變數的數值計算

2021-09-20 20:17:03 字數 3356 閱讀 3961

變數的數值計算覺的有如下命令

(())、let、expr、bc、$

下面看看數值計算的運算子

(())此法很常用且效率高,用於執行整數型的計算,不支援浮點型。

如圖[root@localhost ~]# ((a=1+2**3-4%3))

[root@localhost ~]# echo $a

8[root@localhost ~]# b=$((1+2**3-4%3))

[root@localhost ~]# echo $b

8[root@localhost ~]# 

其中2**3是2的3次方

[root@localhost ~]# echo $((a++))

8[root@localhost ~]# echo $a

9[root@localhost ~]# echo $((a--))

9[root@localhost ~]# echo $a

8[root@localhost ~]# echo $((++a))

9[root@localhost ~]# echo $a

9[root@localhost ~]# echo $((--a))

8[root@localhost ~]# echo $a

8[root@localhost ~]# 

由上面可以看到,$((a++))是先輸出a原來的值再去加,然後我們echo $a的時候,實際上就是輸出變數a運算後的值啦。

記憶方法:變數在前,先輸出變數值,變數在後,就是先去處後輸出變數的值

上面都是整數的,如果有小數的話就會報錯了,如果想用小數的話可以用bc命令

[root@localhost ~]# cat test.sh

#!/bin/bash

a=6b=2

echo "a-b=$(( $a-$b ))"

echo "a-b=$(( $a+$b ))"

echo "a-b=$(( $a*$b ))"

echo "a-b=$(( $a/$b ))"

echo "a-b=$(( $a**$b ))"

echo "a-b=$(( $a%$b ))"

[root@localhost ~]# sh test.sh 

a-b=4

a-b=8

a-b=12

a-b=3

a-b=36

a-b=0

如果你想通過命令列傳參的方式實現上面的運算的話可以修改指令碼為以下的

#!/bin/bash

a=$1

b=$2 

echo "a-b=$(( $a-$b ))"

echo "a-b=$(( $a+$b ))"

echo "a-b=$(( $a*$b ))"

echo "a-b=$(( $a/$b ))"

echo "a-b=$(( $a**$b ))"

echo "a-b=$(( $a%$b ))"

如圖:執行命令

"test.sh" 9l, 167c 已寫入

[root@localhost ~]# sh test.sh 8 2

a-b=6

a-b=10

a-b=16

a-b=4

a-b=64

a-b=0

[root@localhost ~]# sh test.sh 8 3

a-b=5

a-b=11

a-b=24

a-b=2

a-b=512

a-b=2

下面我們做乙個小的計算器

[root@localhost shell]# cat compute.sh 

#!/bin/bash

echo $(($1$2$3))

[root@localhost shell]# sh compute.sh 1+2

3[root@localhost shell]# 

當然這個是比較簡單的,很多的bug我們可以看看其他人寫的

其中的一些**就寫的不錯,如下

#!/bin/bash

echo " ----------------------------------"

echo "|這是乙個簡單的整數計算器,作者yuan|"

echo " ----------------------------------"

echo

while :

doread -p  "請輸入乙個整數: " nu

expr $nu + 0 &> /dev/null

if [ $? -eq 0 ]

then

echo "第乙個數是$nu"

break

else

echo "您輸入的$nu不是整數請重新輸入"

fidone

while :

doread -p  "請輸入二個整數: " nu2

expr $nu2 + 0 &> /dev/null

if [ $? -eq 0 ]

then

echo "第二個數是$nu2"

break

else

echo "您輸入的$nu2不是整數請重新輸入"

fidone

echo  "------------------"

echo "|  1.加法          |"

echo "|  2.減法          |"

echo "|  3.乘法         |"

echo "|  4.除法         |"

echo  "------------------"

read -p "請輸入您想執行的演算法:" me

case $me in

"1")

sum=`expr $nu + $nu2`

echo "$nu+$nu2=$sum"

;;"2")

jian=`expr $nu - $nu2`

echo "$nu-$nu2=$jian"

;;"3")

chen=`expr $nu \* $nu2`

echo "$nu*$nu2=$chen"

;;"4")

chu=`expr $nu / $nu2`

echo "$nu/$nu2=$chu"

esac

還有一種方法可以用來判斷輸入是不是為數字

[ -z `echo "$1"|sed 's/[0-9]//g'`  ] && echo 1||echo 0

上面的解析是說如果$1把數字刪除了,還是不是空的,如果是空的,就輸出1如果不是就輸出0

shell變數的數值計算

root foundation63 a 123 root foundation63 expr a 10 133 root foundation63 expr a 10 113 root foundation63 expr a 10 此命令不能識別,必須加 root foundation63 echo...

三 shell 變數的數值計算

三 read 運算操作符與運算命令 意義舉例 用於整數的常用運算子,效率很高 i 6 1 i 6 1 let類似 效率沒 高 let i 6 1 expr 可用於整數運算,還有許多額外功能 i expr 6 1 bclinux下的計算器,適合整數和小數運算 echo 1.0 6.0 用於整數運算 i...

shell基礎 變數的數值計算

變數的數值計算 1 實驗1 root day4 cat test.sh bin bash a 6b 2 echo a b a b echo a b a b echo a b a b echo a b a b echo a b a b echo a b a b root day4 sh test.sh...