From 33a109f14c3473b70ca1564188decd9bb1c8db9f Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 14 Jul 2023 08:40:25 +0800 Subject: [PATCH] translated --- ...️ Bash Basics Series 4 Arithmetic Operations.md | 223 ------------------ ...️ Bash Basics Series 4 Arithmetic Operations.md | 223 ++++++++++++++++++ 2 files changed, 223 insertions(+), 223 deletions(-) delete mode 100644 sources/tech/20230703.0 ⭐️⭐️ Bash Basics Series 4 Arithmetic Operations.md create mode 100644 translated/tech/20230703.0 ⭐️⭐️ Bash Basics Series 4 Arithmetic Operations.md diff --git a/sources/tech/20230703.0 ⭐️⭐️ Bash Basics Series 4 Arithmetic Operations.md b/sources/tech/20230703.0 ⭐️⭐️ Bash Basics Series 4 Arithmetic Operations.md deleted file mode 100644 index 3add456791..0000000000 --- a/sources/tech/20230703.0 ⭐️⭐️ Bash Basics Series 4 Arithmetic Operations.md +++ /dev/null @@ -1,223 +0,0 @@ -[#]: subject: "Bash Basics Series #4: Arithmetic Operations" -[#]: via: "https://itsfoss.com/bash-arithmetic-operation/" -[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Bash Basics Series #4: Arithmetic Operations -====== - -You can do a lot of things with bash scripts. Performing simple arithmetic operations with the variables is one of them. - -The syntax for arithmetic operations in the bash shell is this: - -``` -$((arithmetic_operation)) -``` - -Let's say you have to calculate the sum of two variables. You do it like this: - -``` -sum=$(($num1 + $num2)) -``` - -There is no restriction on the use of white space inside the (()). You can use `$(( $num1+ $num2))`, `$(( $num1+ $num2 ))` or `$(( $num1+ $num2 ))`. It all will work the same. - -Before I discuss it in detail with examples, let me share the arithmetic operators it supports. - -### Basic arithmetic operators in Bash - -Here's a list of the arithmetic operators in the Bash shell. - -| Operator | Description | -| :- | :- | -| + | Addition | -| - | Subtraction | -| * | Multiplication | -| / | Integer division (without decimal) | -| % | Modulus division (only remainder) | -| ** | Exponentiation (a to the power b) | - -> 🚧 Bash does not support floating points (decimals). You'll have to use other commands like`bc`to deal with them. - -### Addition and subtraction in bash - -Let's see it by writing a script that takes two numbers from the user and then prints their sum and subtraction. - -``` -#!/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" -``` - -I believe you are familiar with using the read command to [accept user input in bash][1] from the previous chapter. - -You should focus on these two lines: - -``` -sum=$(($num1+$num2)) -sub=$(($num1-$num2)) -``` - -Save this script as `sum.sh` and run it. Give it some inputs and check the result. - -![Example of addition and subtraction in Bash shell script][2] - -### Multiplication in bash - -Let's move to multiplication now. - -Here's a sample script that converts kilometers into meters (and troubles US readers :D). For reference, 1 kilometer is equal to 1000 meters. - -``` -#!/bin/bash - -read -p "Enter distance in kilometers: " km -meters=$(($km*1000)) - -echo "$km KM equals to $meters meters" -``` - -Save the script as `multi.sh`, give it execute permission and run it. Here's a sample output: - -![Multiplication in bash script][3] - -Looks good, no? Let's move on to division. - -### Division in bash scripts - -Let's see division with a very simple script: - -``` -#!/bin/bash - -num1=50 -num2=5 - -result=$(($num1/$num2)) - -echo "The result is $result" -``` - -You can easily guess the result: - -``` -The result is 10 -``` - -That's fine. But let's change the numbers and try to divide 50 by 6. Here's what it shows as result: - -``` -The result is 8 -``` - -**But that's not correct.** The correct answer should be 8.33333. - -That's because bash only deals with integers by default. You need additional CLI tools to handle floating points (decimals). - -The most popular tool is [bc][4] which is quite a powerful calculator language to deal with mathematical operations. However, you don't need to go into detail for now. - -You have to 'echo' the arithmetic operation to bc via pipe: - -``` -echo "$num1/$num2" | bc -l -``` - -So, the previous script is modified into: - -``` -#!/bin/bash - -num1=50 -num2=6 - -result=$(echo "$num1/$num2" | bc -l) - -echo "The result is $result" -``` - -And now you get the result: - -``` -The result is 8.33333333333333333333 -``` - -Notice the `result=$(echo "$num1/$num2" | bc -l)`, it now uses the command substitution that you saw in [chapter 2 of this series][5]. - -The `-l` option loads standard math library. By default, bc will go up to 20 decimal points. You can change the scale to something smaller in this way: - -``` -result=$(echo "scale=3; $num1/$num2" | bc -l) -``` - -Let's see some more examples of floating points in bash. - -### Handling floating points in bash scripts - -Let's modify the `sum.sh` script to handle floating points. - -``` -#!/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" -``` - -Try running it now and see if handles floating points properly or not: - -![Floating points in bash script][6] - -### 🏋️🤸 Exercise time - -Time to do some maths and bash exercises together. - -**Exercise 1**: Create a script that accepts input in GB and outputs its equivalent value in MB and KB. - -**Exercise 2**: Write a script that takes two arguments and outputs the result in exponential format. - -So, if you enter 2 and 3, the output will be 8, which is 2 to the power 3. - -**Hint**: Use the exponentiation operator ** - -**Exercise 3**: Write a script that converts Centigrade to Fahrenheit. - -**Hint**: Use the formula F = C x (9/5) + 32. You'll have to use `bc` command here. - -You can discuss the exercises and their solution in the community. - -In the next chapter, you'll [learn about arrays in Bash][7]. Stay tuned. - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/bash-arithmetic-operation/ - -作者:[Abhishek Prakash][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/abhishek/ -[b]: https://github.com/lkxed/ -[1]: https://itsfoss.com/bash-pass-arguments/ -[2]: https://itsfoss.com/content/images/2023/07/addition-substraction-bash-script.png -[3]: https://itsfoss.com/content/images/2023/07/multiplication-bash-script.png -[4]: https://www.gnu.org/software/bc/manual/html_mono/bc.html -[5]: https://itsfoss.com/bash-use-variables/ -[6]: https://itsfoss.com/content/images/2023/07/floating-point-bash.png -[7]: https://itsfoss.com/bash-arrays/ diff --git a/translated/tech/20230703.0 ⭐️⭐️ Bash Basics Series 4 Arithmetic Operations.md b/translated/tech/20230703.0 ⭐️⭐️ Bash Basics Series 4 Arithmetic Operations.md new file mode 100644 index 0000000000..17116146fe --- /dev/null +++ b/translated/tech/20230703.0 ⭐️⭐️ Bash Basics Series 4 Arithmetic Operations.md @@ -0,0 +1,223 @@ +[#]: subject: "Bash Basics Series #4: Arithmetic Operations" +[#]: via: "https://itsfoss.com/bash-arithmetic-operation/" +[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Bash 基础知识系列 #4:算术运算 +====== + +你可以使用 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 中接受用户输入][1]。 + +你应该关注这两行: + +``` +sum=$(($num1+$num2)) +sub=$(($num1-$num2)) +``` + +将此脚本保存为 `sum.sh` 并运行它。给它一些输入并检查结果。 + +![Example of addition and subtraction in Bash shell script][2] + +### bash 中的乘法 + +现在让我们转向乘法。 + +这是一个将公里转换为米的示例脚本(这给美国读者带来了麻烦:D)。作为参考,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][3] + +看起来不错,不是吗? 让我们继续进行除法。 + +### 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][4],它是一种处理数学运算的非常强大的计算器语言。不过,你现在不需要关注细节。 + +你必须通过管道将算术运算“回显”给 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 章][5]中看到的命令替换。 + +`-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][6] + +### 🏋️🤸 练习时间 + +是时候一起做一些数学和 bash 练习了。 + +**练习 1**:创建一个脚本,接受以 GB 为单位的输入并以 MB 和 KB 为单位输出其等效值。 + +**练习 2**:编写一个带有两个参数并以指数格式输出结果的脚本。 + +因此,如果输入 2 和 3,输出将为 8,即 2 的 3 次方。 + +**提示**:使用幂运算符** + +**练习 3**:编写一个将摄氏度转换为华氏度的脚本。 + +**提示**:使用公式 F = C x (9/5) + 32。你必须在此处使用 `bc` 命令。 + +你可以在社区中讨论练习及其方案。 + +在下一章中,你将[了解 Bash 中的数组][7]。敬请关注。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/bash-arithmetic-operation/ + +作者:[Abhishek Prakash][a] +选题:[lkxed][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lkxed/ +[1]: https://itsfoss.com/bash-pass-arguments/ +[2]: https://itsfoss.com/content/images/2023/07/addition-substraction-bash-script.png +[3]: https://itsfoss.com/content/images/2023/07/multiplication-bash-script.png +[4]: https://www.gnu.org/software/bc/manual/html_mono/bc.html +[5]: https://itsfoss.com/bash-use-variables/ +[6]: https://itsfoss.com/content/images/2023/07/floating-point-bash.png +[7]: https://itsfoss.com/bash-arrays/