Linux中國

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 並運行它。給它一些輸入並檢查結果。

Example of addition and subtraction in Bash shell script

Bash 中的乘法

現在讓我們轉向乘法。

這是一個將公里轉換為米的示例腳本(這給美國讀者帶來了麻煩 ?)。作為參考,1 公里等於 1000 米。

#!/bin/bash

read -p "Enter distance in kilometers: " km
meters=$(($km*1000))

echo "$km KM equals to $meters meters"

將腳本保存為 multi.sh,賦予其執行許可權並運行它。這是一個示例輸出:

Multiplication in bash script

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

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"

現在嘗試運行它,看看是否可以正確處理浮點:

Floating points in bash script

?️? 練習時間

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


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...
    Linux中國

    SSL/TLS 加密新紀元 – Lets Encrypt

    根據 Let's Encrypt 官方博客消息,Let's Encrypt 服務將在下周(11 月 16 日)正式對外開放。 Let's Encrypt 項目是由互聯網安全研究小組(ISRG,Internet Security Research Group)主導並開發的一個新型數字證書認證機構(CA,Certificate ...