在数学中,modulo运算符广为人知,用于确定两个数值在除法后的剩余部分。这个数学运算符也可以用在bash脚本中。因此,我们将看到如何在bash中使用模运算符,用不同的方法来获得余数。让我们先从Ubuntu 20.04系统中登录。试试 "Ctrl+Alt+T "来启动Ubuntu桌面上的shell终端。让我们来看看几个例子。
例1:
让我们从第一个例子开始,简单地在终端上使用modulo运算符。要在shell中使用modulo,我们必须利用 "expr "命令来评估其值。因此,我们连续添加了三个 "expr "命令,通过在它们之间使用"%"运算符来找出两个整数值的模,并得到三个余数值。
$ expr 79 % 12
$ expr 89 % 12
$ expr 99 % 12

例2:
让我们看看在使用bash文件时,如何在bash脚本中使用模数运算符。因此,我们创建了一个新的文件 "modulo.sh",并在 "GNU Nano "编辑器中打开它。
$ touch modulo.sh
$ nano modulo.sh

你需要在文件中首先添加bash扩展名,即 "#!/bin/bash"。之后,我们有两个变量,"a "和 "b",并给这两个变量分配了整数值。另一个变量 "res "一直在使用模数运算符来计算两个变量的模数,即a和b。最后,这里使用echo语句来显示两个变量在shell终端内通过模数运算符计算的余数。

当我们运行这段代码时,它将显示1作为10和3值的余数。
$ bash modulo.sh

例3:
为了使我们的代码更具交互性,让我们把用户的数值作为输入。因此,我们添加了bash扩展。这里使用了两个读语句来获取用户的输入并保存到变量 "a "和 "b "中。输入必须是一个整数类型。res "变量已经通过使用modulo运算符来计算余数,显示echo命令。

第一次运行这段代码后,一个用户将17和3相加,得到2作为余数。
$ bash modulo.sh

第二次运行这段代码后,用户加入53和3作为输入,得到2作为模数。
$ bash modulo.sh

例4:
让我们开始在bash脚本的一些循环中使用模数。所以,再次打开同一个文件来更新代码。在添加了bash扩展后,我们已经初始化了一个 "for "循环,范围从数值3到43。在它里面,"if "语句被用来评估表达式。这里使用了 "expr "命令,在每个迭代器的定义范围内使用模数运算符计算余数,再除以 "2"。if "语句一直在检查,如果表达式的余数不等于 "0",那么它将继续通过 "echo "语句打印出特定范围的值。"for "循环在 "if "语句之后结束。

在shell上用bash命令运行modulo.sh文件后,我们得到以下结果。由于该范围内的所有偶数都能完全被 "2 "整除,并得到 "0 "的余数,这就是为什么 "echo "语句没有在shell上显示它们。而所有的奇数都不能完全被 "2 "整除,因此它们被打印出来。
$ bash modulo.sh

例5:
如果有人想显示余数,这个例子是为他/她准备的,因为我们在前面的例子中没有显示余数。代码开始时,从用户那里获取整数值作为输入,并将其保存到变量 "a "中。变量 "rem "使用模运算符计算值 "a "除以2的余数,echo语句显示余数。如果 "余数 "等于 "0",它将显示成功信息;否则,shell上的失败信息使用 "if "和 "else "子句中的echo语句。

用户添加了8作为输入,运行代码后得到的余数是 "0"。所以,它得到了一个成功信息。
$ bash modulo.sh

当第二次运行该代码时,用户添加了14作为输入,得到的余数是1。因此,它得到了 "不完全可除 "的信息。
$ bash modulo.sh

整个过程中,我们使用了相同的除数,即2,让我们改变除数。所以,打开同一个文件,按照下面的快照,将其更新为 "7"。其余的代码是一样的。保存你更新的bash代码,看看结果。

运行更新后的文件后,用户添加了 "89 "作为除数。结果,当除以 "7 "时,得到 "5 "作为余数。因此,"不完全可分 "的语句被执行。
$ bash modulo.sh

当再次运行时,用户添加了77作为输入,得到0作为提醒,即完全可分。
$ bash modulo.sh

例6:
让我们来看看最后一个也是最重要的一个例子,得到用户的除数和被除数的值。所以,这里使用了 "read "语句来实现这一目的。红利值被保存在变量 "a "中,除数值将被保存在变量 "b "中。"if "语句被用来做一个条件。"expr "命令被用来获取两个值的模数,即a和b。如果等于,它将打印 "if "子句的 "echo "语句,否则将打印 "else "子句的 "echo "语句。

运行这段代码后,用户将77作为输入除数,4作为除数。余数不等于0,所以它显示了 "else "子句的 "echo "语句。
$ bash modulo.sh

总结
这篇文章对于bash用户在shell中用模运算符计算一些数学值的余数时,确实会有帮助。所有的例子都很简单,而且解释得很清楚,以便更好地理解。