在本系列的第四章,學習在 Bash 中使用基本數學運算。
你可以使用 Bash 腳本做很多事情。對變量執行簡單的算術運算就是其中之一。
Bash shell 中算術運算的文法如下:
$((arithmetic_operation))
假設你必須計算兩個變量的總和。你這樣做:
sum=$(($num1 + $num2))
()
内空格的使用沒有限制。你可以使用
$(( $num1+ $num2))
、
$(( $num1+ $num2 ))
或者
$(( $num1+ $num2 ))
。它們都一樣。
在通過示例詳細讨論之前,我先分享一下它支援的算術運算符。
Bash 中的基本算術運算符
以下是 Bash shell 中算術運算符的清單。
運算符 | 描述 |
---|---|
| 加法 |
| 減法 |
| 乘法 |
| 整數除法(不帶小數) |
| 模除法(僅餘數) |
| 求幂(a 的 b 次方) |
🚧 Bash 不支援浮點數(小數)。你必須使用其他指令(例如 bc
)來處理它們。
Bash 中的加法和減法
讓我們通過編寫一個腳本來看看它,該腳本從使用者那裡擷取兩個數字,然後列印它們的總和和減法。
#!/bin/bash
read -p "Enter first number: " num1
read -p "Enter second number: " num2
sum=$(($num1+$num2))
sub=$(($num1-$num2))
echo "The summation of $num1 and $num2 is $sum"
echo "The substraction of $num2 from $num1 is $sub"
我相信你熟悉上一章中使用
read
指令來在 Bash 中接受使用者輸入。
你應該關注這兩行:
sum=$(($num1+$num2))
sub=$(($num1-$num2))
将此腳本儲存為
sum.sh
并運作它。給它一些輸入并檢查結果。
Bash 中的乘法
現在讓我們轉向乘法。
這是一個将公裡轉換為米的示例腳本(這給美國讀者帶來了麻煩 😄)。作為參考,1 公裡等于 1000 米。
#!/bin/bash
read -p "Enter distance in kilometers: " km
meters=$(($km*1000))
echo "$km KM equals to $meters meters"
将腳本儲存為
multi.sh
,賦予其執行權限并運作它。這是一個示例輸出:
看起來不錯,不是嗎? 讓我們繼續進行除法。
Bash 腳本中的除法
讓我們用一個非常簡單的腳本來看看除法:
#!/bin/bash
num1=50
num2=5
result=$(($num1/$num2))
echo "The result is $result"
你很容易猜到結果:
The result is 10
沒關系。但是讓我們更改數字并嘗試将 50 除以 6。結果如下:
The result is 8
但這不正确。正确答案應該是 8.33333。
這是因為 Bash 預設情況下隻處理整數。你需要額外的指令行工具來處理浮點(小數)。
最流行的工具是 bc,它是一種處理數學運算的非常強大的電腦語言。不過,你現在不需要關注細節。
你必須通過管道将算術運算“回顯”給
bc
:
echo "$num1/$num2" | bc -l
于是,将之前的腳本修改為:
#!/bin/bash
num1=50
num2=6
result=$(echo "$num1/$num2" | bc -l)
echo "The result is $result"
現在你得到結果:
The result is 8.33333333333333333333
請注意
result=$(echo "$num1/$num2" | bc -l)
,它現在使用你在本系列第 2 章中看到的指令替換。
-l
選項加載标準數學庫。預設情況下,
bc
最多保留 20 位小數。你可以通過以下方式将比例更改為較小的位數:
result=$(echo "scale=3; $num1/$num2" | bc -l)
讓我們看看 Bash 中浮點的更多示例。
在 Bash 腳本中處理浮點
讓我們修改
sum.sh
腳本來處理浮點。
#!/bin/bash
read -p "Enter first number: " num1
read -p "Enter second number: " num2
sum=$( echo "$num1+$num2" | bc -l)
sub=$( echo "scale=2; $num1-$num2" | bc -l)
echo "The summation of $num1 and $num2 is $sum"
echo "The substraction of $num2 from $num1 is $sub"
現在嘗試運作它,看看是否可以正确處理浮點:
🏋️🤸 練習時間
是時候一起做一些數學和 Bash 練習了。
練習 1:建立一個腳本,接受以 GB 為機關的輸入并以 MB 和 KB 為機關輸出其等效值。
練習 2:編寫一個帶有兩個參數并以指數格式輸出結果的腳本。是以,如果輸入 2 和 3,輸出将為 8,即 2 的 3 次方。
提示:使用幂運算符
**
。
練習 3:編寫一個将攝氏度轉換為華氏度的腳本。
提示:使用公式 F = C x (9/5) + 32。你必須在此處使用
bc
指令。
你可以在社群中讨論練習及其方案。
在下一章中,你将 了解 Bash 中的數組。敬請關注。
(題圖:MJ/8a9dfb90-99a4-4203-bc44-d805d09bc16f)
via: https://itsfoss.com/bash-arithmetic-operation/
作者:Abhishek Prakash選題:lkxed譯者:geekpi校對:wxy
本文由 LCTT原創編譯,Linux中國榮譽推出