Bash 初学者系列 5:在 bash 中进行数学运算

系统 Linux
今天我们将介绍在 bash 中使用运算符来执行算术运算。

在编写 bash 脚本的时候,经常会遇到需要计算数学结果的情况,比如需要计算磁盘剩余空间、文件大小、密码到期时间、主机数量、网络带宽等。

今天我们将介绍在 bash 中使用运算符来执行算术运算。

总体来说,bash 中的算术运算符包括以下这些:

运算符

描述

+

加法运算

-

减法运算

*

乘法运算

/

整除

%

求余

**

幂运算

在bash脚本中执行加法和减法

为了便于演示,我们创建一个名为 addition.sh 的脚本文件,添加两个文件的大小(以字节 byte 为单位),并输出。

为此,大家需要了解 bash 脚本中的参数,还有 cut 以及 du 命令。

du 命令计算文件的大小,其输出包括两列,分别为文件大小和文件名,cut 命令取出其中的第一列(即文件大小);du 命令的输出通过管道重定向​传递给 cut 命令。

脚本如下所示:​

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

在运行上述脚本的时候,需要给出两个文件名作为参数。比如,我们将文件 /etc/passwd/etc/group 作为参数来运行该脚本:​

$ ./addition.sh /etc/passwd /etc/groupFile size of /etc/passwd is: 2795File size of /etc/group is: 1065Total size is: 3860

在 addition.sh 脚本中最重要的一行为:

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

上面代码使用 运算符 + 将两个数字 $fs1 和 $fs2 相加。这里需要注意的是,算术表达式需要使用双括号将其括起来:

$((arithmetic-expression))

也可以使用减号运算符 - 来进行减法运算。比如,下面的代码,其结果将为 7:

sub=$((10-3))

执行乘法和除法

我们创建一个名为 giga2mega.sh 的脚本文件,用于将 GB 转为 MB,如下所示:​

#!/bin/bash
GIGA=$1MEGA=$(($GIGA
echo "$GIGA GB is equal to $MEGA

下面我们来执行一下,看看 4GB 相当于多少 MB:​

$ ./giga2mega.sh 44 GB is equal to 4096 MB

在这里,我们使用了乘法(*)运算符将 GB 数乘以1024,得到等效的兆字节数:

MEGA=$(($GIGA * 1024))

类似的,将 GB 转为 KB 也是一样的做法:

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

除法运算符 / 用于两个数相除,比如下面例子:

div=$((20 / 4))

注意,这里是整除,所有的小数部分会丢失。比如,计算 5 除以 2,其结果为 2:​

$ div=$((5 / 2))$echo $div2

要实际计算两个数相除的结果(获取十进制的结果),可使用 bc 命令,比如,还是计算 5 除以 2,可参照如下代码:​

echo "5/2"2.50000000000000000000

另外,在其他算术运算符中也可以使用 bc 命令:

图片

使用幂和余数(模)

下面我们使用幂运算符 ** 进行求幂运算。首先创建一个名为 power.sh 的脚本,接受两个数字作为参数:a 和 b,然后计算 a 的 b 次幂,如下代码所示:​

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

我们来运行一下:​

$ ./power.sh 2 32^3=8$ ./power.sh 3 23^2=9$ ./power.sh 5 25^2=25$ ./power.sh 4 24^2=16

计算余数使用运算符 %,如下所示:

rem=$((17%5))

其结果为 2,大家可以运行试一下。

责任编辑:庞桂玉 来源: TIAP
相关推荐

2022-12-14 10:08:00

BashLinux

2022-12-02 14:30:24

Bash脚本数组

2022-12-13 12:55:15

Bash循环

2022-12-01 08:10:49

Bash脚本参数

2020-08-11 13:00:34

GNU bcLinuxShell

2022-12-09 07:58:52

Bash条件语句

2022-12-16 09:01:24

2022-11-30 07:47:00

Bash脚本

2022-12-08 12:05:03

Bash字符串

2022-11-28 08:01:47

BashLinuxshell 脚本

2023-07-20 15:37:50

Bash数组

2011-06-17 15:06:14

Qt

2010-01-15 19:05:42

学习C++

2009-11-13 15:46:25

Java多线程

2011-08-29 15:45:59

Lua函数

2022-04-24 15:21:01

MarkdownHTML

2011-09-16 09:38:19

Emacs

2023-07-17 14:29:01

Bash算术运算

2011-04-12 10:13:24

2023-07-12 14:13:03

BashLinux
点赞
收藏

51CTO技术栈公众号