天天看點

軟體開發 | Bash 基礎知識系列 #4:算術運算

作者:硬核老王
軟體開發 | Bash 基礎知識系列 #4:算術運算
在本系列的第四章,學習在 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 基礎知識系列 #4:算術運算

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 基礎知識系列 #4:算術運算

看起來不錯,不是嗎? 讓我們繼續進行除法。

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 基礎知識系列 #4:算術運算

🏋️🤸 練習時間

是時候一起做一些數學和 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中國榮譽推出

繼續閱讀