在Bash脚本中使用算术运算符

时间:2020-03-05 15:31:34  来源:igfitidea点击:

我们将学习使用Bash运算符进行各种算术计算。

这里是Bash中的算术运算符:

|运算符|描述|
| --- - | --- |
| + |加法|
| - |减法|
| * |乘法|
|/|除法(没有十进制数)|
| %|模量分部(仅提供余数)|
| ** |指数(x的y次方)|

在Bash脚本中执行添加和减法

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

du命令为我们提供文件的大小。

输出具有文件大小和文件名。
这是切割命令用于提取第一列的位置(即

文件大小)来自输出。
使用管道重定向传递du命令的输出以切割命令。

这是脚本:

#!/bin/bash
fs1=$(du -b  | cut -f1)
fs2=$(du -b  | cut -f1)
echo "File size of  is: $fs1"
echo "File size of  is: $fs2"
total=$(($fs1 + $fs2))
echo "Total size is: $total"

请注意,我们将把两个文件名作为参数传递给脚本。
例如,这里我运行脚本并通过两个文件/etc/passwd/etc/group作为参数:

Hyman@theitroad:~/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

添加脚本中最重要的线是:

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

我们使用+运算符添加两个数字$FS1和$FS2.
另请注意,为了评估我们必须在双重括号之间括起来的任何算术表达式如下:

$((arithmetic-expression))

我们还可以使用负运算符( - )来减法。
例如,以下语句中的子变量的值将导致七:

sub=$((10-3))

在Bash脚本中执行乘法和除法

让我们创建一个名为giga2mega.sh的bash脚本,它将将gigabytes(gb)转换为megabytes(MB):

#!/bin/bash
GIGA=
MEGA=$(($GIGA * 1024))
echo "$GIGA GB is equal to $MEGA MB"

现在让我们运行脚本来了解四个千兆字节中有多少兆字节:

Hyman@theitroad:~/scripts$./giga2mega.sh 4
4 GB is equal to 4096 MB

这里我使用乘法(*)运算符将千兆字节数乘以1024以获取兆字节等同物:

MEGA=$(($GIGA * 1024))

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

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

我会让你将千兆字节转换为字节作为练习运动!

我们还可以使用Division Operator(/)划分两个数字。
例如,以下语句中div变量的值将评估为五个:

div=$((20/4))

请注意,这是整数划分,因此所有分数都丢失。
例如,如果我们将5划分为2,则将获得2个不正确的2:

Hyman@theitroad:~/scripts$div=$((5/2))
Hyman@theitroad:~/scripts$echo $div
2

获得十进制输出;我们可以使用"BC"命令。
例如,要使用"bc`命令划分5到2,我们可以使用以下语句:

echo "5/2" | bc -l
2.50000000000000000000

请注意,只要我们处理十进制数字,我们可以使用其他运算符以及"BC""命令使用其他运算符:

使用指数和余数(Modulo)

让我们创建一个电力计算器!我将创建一个名为power.sh的脚本,它将接受两个数字a和b(作为参数),它将显示升高的结果B:

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

请注意,我使用指数运算符(**)来计算提升到B的力量的结果。

让我们做一些脚本来确保它产生了正确的答案:

Hyman@theitroad:~/scripts$./power.sh 2 3
2^3=8
Hyman@theitroad:~/scripts$./power.sh 3 2
3^2=9
Hyman@theitroad:~/scripts$./power.sh 5 2
5^2=25
Hyman@theitroad:~/scripts$./power.sh 4 2
4^2=16

我们还可以使用Modulo Operator(%)来计算整数余量。
例如,以下语句中的REM变量的值将评估为2:

rem=$((17%5))

这里的余数是2,因为17除以5,剩下2