shell腳本編程筆記(二)—— 執行數學運算

數學運算在編程中也很重要,shell對它的支持並不算好,本文整理一下shell進行數學運算的途徑,各種方法的缺點。

一、 expr命令

shell最開始處理數學表達式的命令,可以在命令行做算術運算,參數與運算符間一定要有空格,否則無法識別

expr arg1 運算符 arg2

可以將數學表達式結果賦值給一個變量

對於Linux的一些特殊字符,它無法識別,需要使用轉義字符。

由於expr命令比較笨拙,經常無法識別符號,bash引入了一種更簡單的方法執行數學表達式

 

二、 使用$[]做算術運算

將數學表達式放在$[]中,bash便不會將其識別爲特殊符號。

但bash shell有一個致命的缺點,它只支持整數運算,使用浮點數會報錯

 

三、 bash計算器bc

有幾種解決方案能處理bash只支持整數運算的問題,其中最常用的是內建bash計算器bc。

1. bc的基本用法

bc實際上是一種編程語言,它允許在命令行中輸入浮點表達式,然後解釋並計算表達式,最後返回結果。

bc能夠識別:數字(整數與浮點數)、變量、註釋、表達式、編程語句(如if-then)、函數

浮點運算由內建變量scale控制,表示希望在計算結果中保留的小數位數。如果不設置,可能會得到錯誤結果。

bc中支持定義和使用變量,可使用print命令顯示變量值,但變量僅在bc內可見

 

2. 在腳本中使用bc

利用管道 | 將表達式傳送給bc,並將計算結果賦值給變量

var=$(echo "options; expression" | bc)
#或
var=`echo "options; expression" | bc`

#例如
var=$(echo "scale=2; 5/2" | bc)
echo $var

也可以直接計算變量值,例如 $var1 * $var2 + $var3 * $var4

#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(echo "scale=2; $var1*$var2+$var3*$var4" | bc)
echo The final answer is $var5

 

3. 使用內聯輸入重定向

對於複雜運算,可以使用內聯輸入重定向,直接在命令行中重定向數據,更加清晰明瞭。

var=$(bc << EOF
options
statements
expression
EOF
)

例如

#!/bin/bash

var1=10.46
var2=43.67
var3=33.2
var4=71

var5=$(bc << EOF
scale = 4
a1 = ($var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)

echo The final answer is $var5

 

參考:《Linux命令行與shell腳本編程大全》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章