Bash 初学者系列#5:在 Bash 脚本中使用算术运算符

让我们做一些 Bash 数学吧!

在写你的 bash 在脚本中,您经常会发现自己想要找出算术计算的结果,以确定剩余磁盘空间、文件大小、密码到期日期、主机数量、网络带宽等。

在本章的 bash 初学者系列,你将学会使用 bash 运算符来执行各种算术计算。

为了刷新你的记忆,这里是算术运算符 bash:

操作员描述
+添加
减法
*乘法
/整数除法(无十进制数)
%模除法(仅给出余数)
**取幂(x 的 y 次幂)

执行加法和减法 bash 脚本

让我们创建一个 bash 脚本名为 加法.sh 这将简单地添加两个文件大小(以字节为单位)并显示输出。

您必须熟悉 bash 现在的脚本。 我希望你也熟悉 cut 和 du 命令。

du 命令为您提供文件的大小。 输出具有文件大小和文件名。 这是 cut 命令用于从输出中提取第一列(即文件大小)的地方。 du 命令的输出使用管道重定向传递给 cut 命令。

这是脚本:

#!/bin/bash

fs1=$(du -b $1 | cut -f1)
fs2=$(du -b $2 | cut -f1)

echo "File size of $1 is: $fs1"
echo "File size of $2 is: $fs2"

total=$(($fs1 + $fs2))

echo "Total size is: $total"

请注意,您会将两个文件名作为参数传递给脚本。 为了 example,这里我运行脚本并传递两个文件 /etc/passwd /etc/group 作为论据:

[email protected]:~/scripts$ ./addition.sh /etc/passwd /etc/group
File size of /etc/passwd is: 2795
File size of /etc/group is: 1065
Total size is: 3860

最重要的线路 加法.sh 脚本是:

total=$(($fs1 + $fs2))

您使用 + 运算符将两个数字 $fs1 和 $fs2 相加的地方。 另请注意,要计算任何算术表达式,您必须用双括号括起来,如下所示:

$((arithmetic-expression))

您还可以使用减号运算符 (-) 来进行减法。 为了 example,以下语句中子变量的值将导致为 7:

sub=$((10-3))

执行乘法和除法 bash 脚本

让我们创建一个 bash 脚本名为 giga2mega.sh 这会将千兆字节 (GB) 转换为兆字节 (MB):

#!/bin/bash

GIGA=$1
MEGA=$(($GIGA * 1024))

echo "$GIGA GB is equal to $MEGA MB"

现在让我们运行脚本来找出 4 GB 中有多少 MB:

[email protected]:~/scripts$ ./giga2mega.sh 4
4 GB is equal to 4096 MB

这里我使用了乘法

MEGA=$(($GIGA * 1024))

运算符将千兆字节数乘以 1024 以获得等效的兆字节数:

KILO=$(($GIGA * 1024 * 1024))

向此脚本添加更多功能以将千兆字节 (GB) 转换为千字节 (KB) 很容易:

我会让你将千兆字节转换为字节作为练习! example您还可以使用除法运算符 (/) 将两个数字相除。 为了

div=$((20 / 4))

,以下语句中 div 变量的值将计算为 5:

[email protected]:~/scripts$ div=$((5 / 2))
[email protected]:~/scripts$ echo $div
2

请注意,这是整数除法,因此所有分数都将丢失。 例如,如果你将 5 除以 2,你会得到 2,这是不正确的,当然: bc 获得十进制输出; 你可以利用 example命令。 为了 bc 用 5 除以 2

echo "5/2" | bc -l
2.50000000000000000000

命令,您可以使用以下语句: bc 请注意,您也可以将其他运算符与

脚本

使用幂和余数(模) 让我们创建一个功率计算器! 我将创建一个名为 电源.sh 这将接受两个数字 一种 b (作为论据) 它会显示结果 一种 提升到权力b

#!/bin/bash
a=$1
b=$2
result=$((a**b))
echo "$1^$2=$result"

请注意,我使用幂运算符 (**) 来计算 一种 提升到权力b

.

[email protected]:~/scripts$ ./power.sh 2 3
2^3=8
[email protected]:~/scripts$ ./power.sh 3 2
3^2=9
[email protected]:~/scripts$ ./power.sh 5 2
5^2=25
[email protected]:~/scripts$ ./power.sh 4 2
4^2=16

让我们运行几次脚本以确保它产生正确的答案: 您还可以使用模运算符 (%) 来计算整数余数。 例如,价值 雷姆

rem=$((17%5))

以下语句中的变量将计算为 2:

这里的余数是 2,因为 5 进入 17 三次,剩下 2 次! bash 练习时间:制作度数转换器

脚本 让我们通过创建一个名为 c2f.sh

F = C x (9/5) + 32

这将使用以下等式将摄氏度转换为华氏度: bash 这将是一个很好的练习,可以让你尝试刚刚学到的新东西

教程。

#!/bin/bash

C=$1
F=$(echo "scale=2; $C * (9/5) + 32" | bc -l)

echo "$C degrees Celsius is equal to $F degrees Fahrenheit."

这是一个解决方案(可能有几种方法可以达到相同的结果): 我用 公元前

命令,因为我们正在处理小数,我还使用“scale = 2”以两个小数点显示输出。

[email protected]:~/scripts$ ./c2f.sh 2
2 degrees Celsius is equal to 35.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh -3
-3 degrees Celsius is equal to 26.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh 27
27 degrees Celsius is equal to 80.60 degrees Fahrenheit.

让我们运行几次脚本以确保它输出正确的结果: bash 完美的! 这将我们带到本教程的结尾。 通过下载练习您所学的内容

本章练习集。

.a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px;}

下载圈 bash 我希望你喜欢做一些数学 bash 并继续关注下一个教程

初学者系列,因为您将学习如何操作字符串!