自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Bash 基礎(chǔ)知識(shí)系列 #4:算術(shù)運(yùn)算

系統(tǒng) Linux
在本系列的第四章,學(xué)習(xí)在 Bash 中使用基本數(shù)學(xué)運(yùn)算。

你可以使用 Bash 腳本做很多事情。對(duì)變量執(zhí)行簡(jiǎn)單的算術(shù)運(yùn)算就是其中之一。

Bash shell 中算術(shù)運(yùn)算的語法如下:

$((arithmetic_operation))

假設(shè)你必須計(jì)算兩個(gè)變量的總和。你這樣做:

sum=$(($num1 + $num2))

(()) 內(nèi)空格的使用沒有限制。你可以使用 $(( $num1+ $num2))、$(( $num1+ $num2 )) 或者 $(( $num1+ $num2 ))。它們都一樣。

在通過示例詳細(xì)討論之前,我先分享一下它支持的算術(shù)運(yùn)算符。

Bash 中的基本算術(shù)運(yùn)算符

以下是 Bash shell 中算術(shù)運(yùn)算符的列表。

運(yùn)算符

描述

+

加法

-

減法

*

乘法

/

整數(shù)除法(不帶小數(shù))

%

模除法(僅余數(shù))

**

求冪(a 的 b 次方)

?? Bash 不支持浮點(diǎn)數(shù)(小數(shù))。你必須使用其他命令(例如 bc)來處理它們。

Bash 中的加法和減法

讓我們通過編寫一個(gè)腳本來看看它,該腳本從用戶那里獲取兩個(gè)數(shù)字,然后打印它們的總和和減法。

#!/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 中接受用戶輸入

你應(yīng)該關(guān)注這兩行:

sum=$(($num1+$num2))
sub=$(($num1-$num2))

將此腳本保存為 sum.sh 并運(yùn)行它。給它一些輸入并檢查結(jié)果。

Example of addition and subtraction in Bash shell scriptExample of addition and subtraction in Bash shell script

Bash 中的乘法

現(xiàn)在讓我們轉(zhuǎn)向乘法。

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

#!/bin/bash
read -p "Enter distance in kilometers: " km
meters=$(($km*1000))

echo "$km KM equals to $meters meters"

將腳本保存為 multi.sh,賦予其執(zhí)行權(quán)限并運(yùn)行它。這是一個(gè)示例輸出:

Multiplication in bash scriptMultiplication in bash script

看起來不錯(cuò),不是嗎? 讓我們繼續(xù)進(jìn)行除法。

Bash 腳本中的除法

讓我們用一個(gè)非常簡(jiǎn)單的腳本來看看除法:

#!/bin/bash
num1=50
num2=5
result=$(($num1/$num2))
echo "The result is $result"

你很容易猜到結(jié)果:

The result is 10

沒關(guān)系。但是讓我們更改數(shù)字并嘗試將 50 除以 6。結(jié)果如下:

The result is 8

但這不正確。 正確答案應(yīng)該是 8.33333。

這是因?yàn)?Bash 默認(rèn)情況下只處理整數(shù)。你需要額外的命令行工具來處理浮點(diǎn)(小數(shù))。

最流行的工具是 bc,它是一種處理數(shù)學(xué)運(yùn)算的非常強(qiáng)大的計(jì)算器語言。不過,你現(xiàn)在不需要關(guān)注細(xì)節(jié)。

你必須通過管道將算術(shù)運(yùn)算“回顯”給 bc

echo "$num1/$num2" | bc -l

于是,將之前的腳本修改為:

#!/bin/bash
num1=50
num2=6
result=$(echo "$num1/$num2" | bc -l)
echo "The result is $result"

現(xiàn)在你得到結(jié)果:

The result is 8.33333333333333333333

請(qǐng)注意 result=$(echo "$num1/$num2" | bc -l),它現(xiàn)在使用你在 本系列第 2 章 中看到的命令替換。

-l 選項(xiàng)加載標(biāo)準(zhǔn)數(shù)學(xué)庫。默認(rèn)情況下,bc 最多保留 20 位小數(shù)。你可以通過以下方式將比例更改為較小的位數(shù):

result=$(echo "scale=3; $num1/$num2" | bc -l)

讓我們看看 Bash 中浮點(diǎn)的更多示例。

在 Bash 腳本中處理浮點(diǎn)

讓我們修改 sum.sh 腳本來處理浮點(diǎn)。

#!/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"

現(xiàn)在嘗試運(yùn)行它,看看是否可以正確處理浮點(diǎn):

Floating points in bash scriptFloating points in bash script

????? 練習(xí)時(shí)間

是時(shí)候一起做一些數(shù)學(xué)和 Bash 練習(xí)了。

練習(xí) 1:創(chuàng)建一個(gè)腳本,接受以 GB 為單位的輸入并以 MB 和 KB 為單位輸出其等效值。

練習(xí) 2:編寫一個(gè)帶有兩個(gè)參數(shù)并以指數(shù)格式輸出結(jié)果的腳本。因此,如果輸入 2 和 3,輸出將為 8,即 2 的 3 次方。

提示:使用冪運(yùn)算符 **。

練習(xí) 3:編寫一個(gè)將攝氏度轉(zhuǎn)換為華氏度的腳本。

提示:使用公式 F = C x (9/5) + 32。你必須在此處使用 bc 命令。

你可以在社區(qū)中討論練習(xí)及其方案。

在下一章中,你將 了解 Bash 中的數(shù)組。敬請(qǐng)關(guān)注。

責(zé)任編輯:龐桂玉 來源: Linux中國(guó)
相關(guān)推薦

2023-08-11 15:46:40

BashIf Else 語句

2023-08-22 21:42:03

Bash函數(shù)

2023-07-20 15:37:50

Bash數(shù)組

2023-07-12 14:13:03

BashLinux

2023-08-21 12:31:41

BashForWhile

2023-07-30 09:50:51

Bash字符串

2023-07-15 18:19:47

Bash參數(shù)

2011-05-31 09:23:46

2011-05-31 10:54:12

協(xié)議IP進(jìn)制

2011-06-01 09:26:52

路由路由器RIP

2023-06-19 11:30:19

bashshell

2011-05-31 13:50:17

CiscoIOS

2015-08-27 14:50:40

BISSIS

2011-06-02 09:36:07

廣域網(wǎng)協(xié)議虛電路幀中繼

2009-12-22 14:27:28

Cisco3600

2011-06-01 13:18:17

VLANtrunk路由

2011-09-16 10:13:02

Emacs

2011-03-29 14:11:20

Cacti基礎(chǔ)知識(shí)

2009-04-10 09:35:00

WCDMA基礎(chǔ)無線網(wǎng)絡(luò)

2023-07-04 07:31:06

MapReduce數(shù)據(jù)處理編程模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)