Shell編程—【03】數學運算expr與bc浮點數運算

語法格式

# 方法一
expr $num1 operator $num2
# 方法二
$(($num1 operator $num2))
複製代碼

expr 操做符表

操做符 含義
num1 \| num2 num1不爲空且非0,返回num1;不然返回num2
num1 \& num2 num1不爲空且非0,返回num1;不然返回0
num1 \< num2 num1小於num2,返回1;不然返回0
num1 \<= num2 num1小於等於num2,返回1;不然返回0
num1 = num2 num1等於num2,返回1;不然返回0
num1 != num2 num1不等於num2,返回1;不然返回0
num1 \> num2 num1大於num2,返回1;不然返回0
num1 \>= num2 num1大於等於num2,返回1;不然返回0
num1 + num2
num1 - num2
num1 \* num2
num1 / num2
num1 % num2 取餘
  • 注意: | & < > * expr須要使用\轉譯
  • $(( ))不須要轉譯 注意此種運算方式不支持= 和!= 推薦:只使用 + - * / 和 %
  • expr數學運算只能對整數 不支持浮點數
num1=30
num2=50
expr $num1 \> $num2
# 0
expr $num1 \<= $num2
# 1
expr $num1 \* $num2
# 1500
expr $num1 + $num2
# 80

# 使用命令替換賦值
num3=`expr $num1 - $num2`
echo $num3
# -20

# 使用$$(( ))
num3=$((num1+num2))
echo $num3
複製代碼

練習

  • 用戶輸入一個正整數num 而後計算1+2+3+...+num,輸出結果
#!/bin/bash 
while true
do
    read -p "Please input a positive number: " num
    # 作一個數學運算 結果放到垃圾桶
    expr $num + 1 &> /dev/null
    # 若是數學運算成功 $? 爲 0 若是不成功返回非0 因此能夠根據$?來判斷整數
    if [[ $? -eq 0 && $num -gt 0 ]]; then
        sum=0
        for((i=1;i<=$num;i++))
        do
            sum=`expr $i + $sum`
        done 
        echo "1+2...$num = $sum"
        exit
        else
        echo "Number is invalid, pleace try again! "
        continue
    fi
done
複製代碼

浮點數運算

  • bc
  1. bc是bash內建的運算容器,支持浮點數運算
  2. 內建變量scale(精確度,能夠理解爲小數位數)能夠設置,默認爲0
  3. bc有的linux內置,有的沒有內置 (我使用centos 7.x server 是沒有的 能夠直接yum install bc

bc操做符對照表

操做符 含義
num1 + num2
num1 - num2
num1 * num2
num1 / num2
num1 % num2 取餘
num1 ^ num2 指數運算

演示

echo "23 / 12" | bc
# 1
echo "23.2 + 12" | bc
# 35.2
echo "scale=2; 23.3 / 12" | bc
# 1.94
echo "10 / 3 * 2" | bc
# 6
echo "scale=4; 10 / 3 * 2" | bc
# 6.6666

# 加減法小數運算能夠不指定scale,可是乘除若是有小數必定要加scale
複製代碼

輸入兩個數相加

#!/bin/bash 
read -p "Please input num1:" num1
read -p "Please input num2:" num2
# 加法能夠不用指定scale能夠小數相加
result=`echo "$num1 + $num2" | bc`

echo $result
複製代碼
相關文章
相關標籤/搜索