Shell 数学计算:轻松掌握算术运算基本功

料事如神
• 阅读 163

在日常的 Shell 脚本编写中,我们经常会遇到需要进行数学计算的场景。相较于其他编程语言直接支持算数运算,Shell 本身并不直接支持复杂的数学计算,因为它并不如 Python 那样直接支持简单的数学表达式。

不过,别担心,通过本文,你将学会如何在 Shell 中灵活进行各种数学计算。

开始之前

在深入了解细节之前,有必要先了解,尽管 Shell 本身对数学运算的支持很有限,但我们可以通过一些特定的命令和运算方式来进行。有多种方法可以在 Shell 中进行数学运算,包括一些直接的运算器如 (())let,以及依赖于外部工具如 bc 的方式。

下面,我们讲解最常用的数学计算方式,并提供实际的代码示例。准备好开始你的 Shell 数学之旅了吗?

Shell 算术运算符

在深入示例之前,让我们先快速了解一下 Shell 支持的一些基本算术运算符及其含义。

算术运算符说明/含义
+, -加法(或正号)、减法(或负号)
*, /, %乘法、除法、取余(取模)
**幂运算
++, --自增和自减,可以放在变量的前面也可以放在变量的后面
!, &&, \\ 逻辑非(取反)、逻辑与(and)、逻辑或(or)
<, <=, >, >=比较符号(小于、小于等于、大于、大于等于)
==, !=, =比较符号(相等、不相等;对于字符串,= 也可以表示相当于)
<<, >>向左移位、向右移位
~, \, &, ^按位取反、按位或、按位与、按位异或
=, +=, -=, *=, /=, %=赋值运算符

Shell 中的数学计算方式

shell 中常用的六种数学计算方式:

运算操作符/运算命令说明
(( ))用于整数运算,效率很高,推荐使用。但是只能进行整数运算,不能对小数或者字符串进行计算。
let用于整数运算,和 (()) 类似。
$[]用于整数运算,不如 (()) 灵活。
expr可用于整数运算,也可以处理字符串。比较麻烦,需要注意各种细节,不推荐使用。
bcLinux下的一个计算器程序,可以处理整数和小数。Shell 本身只支持整数运算,想计算小数就得使用 bc 这个外部的计算器。
declare -i将变量定义为整数,然后再进行数学运算时就不会被当做字符串了。功能有限,仅支持最基本的数学运算(加减乘除和取余),不支持逻辑运算、自增自减等,所以在实际开发中很少使用。
(()) 可以用于整数计算,bc 可以用于小数计算,推荐只使用 (()) 和 bc 的方式进行运算

使用 (()) 进行整数运算

(( )) 是进行整数运算最推荐的方式,它不仅效率高,而且语法简洁。请注意,(( )) 只支持整数运算,不能用于小数或字符串。

下面通过一些实际的代码示例来展示 (()) 的使用方法:

#!/bin/bash

# 简单的数值运算
echo $((1+1))  # 输出 2

# 变量运算
i=3
((i*=2))  # 等同于 i=i*2,此时 i 的值变为 6
echo $i  # 输出 6

# 复合运算
((a=1+2**3-4%3))
echo $a  # 输出 8,展示了加法、幂运算和取模的组合使用

# 逻辑运算
echo $((3<6))  # 输出 1,1 表示真(true)
echo $((3>6))  # 输出 0,0 表示假(false)

# 自增和自减运算
c=10
echo $((c++))  # 输出 10,c 的值变为 11
echo $c  # 输出 11

# 多表达式运算
((a=3+5, b=a+10))
echo $a $b  # 先计算 a=3+5,然后 b=a+10;最终输出 8 18

这些例子体现了 (()) 在处理各种整数运算中的强大和灵活性。

使用 bc 进行小数计算

对于需要小数运算的场景,bc 是你的最佳选择。它是 Linux 下的一个高精度计算器程序,支持整数和小数运算。

# 使用 bc 进行小数加法
echo "scale=2; 3.14 + 2.86" | bc  # 输出 6.00

# 使用变量
a=5.75
b=4.25
result=$(echo "$a + $b" | bc)
echo $result  # 输出 10.00

bc 使用 scale 来定义小数点后的精度,这在进行小数运算时非常有用。

总结

虽然 Shell 本身对数学运算的支持有限,但通过 (())bc 等方式,我们可以有效地进行整数和小数的计算。

希望本文能帮助你在编写 Shell 脚本时,更加自如地处理数学运算问题。

点赞
收藏
评论区
推荐文章
Irene181 Irene181
3年前
干掉公式 —— numpy 就该这么学
文|太阳雪来源:Python技术「ID:pythonall」机器学习和数据分析变得越来越重要,但在学习和实践过程中,常常因为不知道怎么用程序实现各种数学公式而感到苦恼,今天我们从数学公式的角度上了解下,用python实现的方式方法。友情提示:不要被公式吓到,它们都是纸老虎关于NumpyNumPy是使用Python进行科学计算的基础软
雷厉风行 雷厉风行
2年前
Mac最佳数学计算软件:MATLAB R2023a,成为科学计算专家,全功能版下载
MATLABR2023aforMac是一款数学和工程计算软件,由MathWorks公司开发。该软件主要用于数学建模、分析和可视化,可以帮助工程师、科学家和学生更快速地解决数学、科学和工程问题。MATLABR2023aforMac的功能强大,用户可以使用MATLAB语言编写脚本程序,利用MATLAB的各种工具进行数据分析、图像处理、信号处理、控制系统设计等。
Wesley13 Wesley13
3年前
Java执行shell脚本并返回结果两种方法的完整代码
Java执行shell脚本并返回结果两种方法的完整代码简单的是直接传入String字符串,这种不能执行echo或者需要调用其他进程的命令(比如调用postfix发送邮件命令就不起作用)执行复杂的shell建议使用String\\方式传递(对外可以封装后也传入String字符串)。/运行shell脚本
Wesley13 Wesley13
3年前
PYTHON 数据分析常用类库
numpy科学计算的基础包(1)快速高效多维的数组对象ndarray(2)对数组执行元素级的计算以及直接对数组执行数学运算的函数(3)读写硬盘上基于数组的数据集的工具(4)线性代数运算,傅里叶变换,以及随机数生成(5)将C、C、Fortran代码集成到pythonscipy专门解决科学计算中各种标准问题域的模块的集合
Stella981 Stella981
3年前
Shell编程基础
本文索引:shell中的函数shell中的数组告警系统需求分析shell中的函数shell作为一种编程语言,必然有函数。函数可以大大减少代码,提高代码复用率。shell中的函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。格式
可莉 可莉
3年前
0615 shell编程1
0615shell编程1一、shell脚本介绍shell是一种脚本语言和传统的开发语言比较,会比较简单shell有自己的语法;可以使用逻辑判断、循环等语法可以自定义函数,目的就是为了减少重复的代码shell是系统命令的集合
Stella981 Stella981
3年前
Linux查看内置命令和非内置命令帮助的几种方法(man、help、info)
!(https://oscimg.oschina.net/oscnet/53cb7c40ce2945df9de5490f1d07e660.jpg)内置命令就是shell内核自带的,因为shell当中自己要进行管理,那么就需要一些命令进行管理,不同的shell肯定有不同的shell命令,我们用type命令就可以看到其的类型,内置shell命令其
Stella981 Stella981
3年前
Shell脚本编程中常用的数学运算实例
加法运算新建一个文件“Addition.sh”,输入下面的内容并赋予其可执行的权限。复制代码代码如下:!/bin/bashecho“EntertheFirstNumber:”readaecho“EntertheSecondNumber:”readbx$(expr"$a""$
Stella981 Stella981
3年前
Sass的运算
本节我们学习Sass中的运算,一般的编程语法中都支持使用运算,Sass中同样可以做各种数学运算,包括最基本的加减乘除运算、变量运算、颜色运算、字符运算等。本节我们主要讲一下Sass中最基本的数学运算。加法运算加法运算是Sass中基本运算之一,在变量或者属性中都可以做加法运算。示例:$num
Stella981 Stella981
3年前
GeoGebra(数学图形计算器)
!GeoGebra(数学图形计算器)(http://static.oschina.net/uploads/img/201603/17165434_ycds.png)插件介绍:数学是我们生活中不可缺少的一部分,处处都会用的数学,在学习数学的过程中,普通的计算器已经无法满足数学学习了,图形计算器就运应而生,这大大滴提高了小伙伴们的学习效率,
流浪剑客 流浪剑客
1年前
Macos商业数学软件:MATLAB R2023a for Mac中文版激活 支持M1
是一款由MathWorks公司开发的高级计算机编程环境和开发工具,被广泛应用于科学研究、工程设计、数据分析和教育等领域。它提供了强大的数学计算功能,支持矩阵运算、数值积分、微分方程求解等,并且支持符号计算,可以进行符号代数操作和解析等运算。MATLABR2
料事如神
料事如神
Lv1
试问岭南好不好。却道。此心安处是吾乡。
文章
4
粉丝
0
获赞
0