Shell数学计算(算术运算,加减乘除运算)

您所在的位置:网站首页 计算器怎么混合运算数字的乘法 Shell数学计算(算术运算,加减乘除运算)

Shell数学计算(算术运算,加减乘除运算)

2024-07-13 23:54:52| 来源: 网络整理| 查看: 265

声明: 本篇博客的学习途径主要为以下网站和课堂讲解,发博客目的仅为学习使用,在该博客的基础上做了一定程序的简略和修改。 参考博客 : 原文链接:http://c.biancheng.net/shell/

Shell数学计算 Shell数学计算数学计算命令对整数进行数学运算: (()) / let / $[] /exprShell (())Shell let命令 bc命令:一款数学计算器在 Shell 中使用 bc 计算器

Shell数学计算

默认情况下,Shell 不会直接进行算术运算,而是把+两边的数据(数值或者变量)当做字符串,把+当做字符串连接符,最终的结果是把两个字符串拼接在一起形成一个新的字符串。

在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。

【典型反面案例】

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

(( )) 只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。

((表达式))

表达式可以只有一个,也可以有多个,多个表达式之间以逗号,分隔。 对于多个表达式的情况,以最后一个表达式的值作为整个 (( )) 命令的执行结果。

可以使用$获取 (( )) 命令的结果,这和使用$获得变量值是类似的。

常见写法

((a=10+66)) a=$((10+66) ((a>7 && b==c)) echo $((a+10)) ((a=3+5, b=a+10))

【注意】:在 (( )) 中使用变量无需加上$前缀,(( )) 会自动解析变量名

【举例】

[c.biancheng.net]$ echo $((1+1)) 2 [c.biancheng.net]$ echo $((6-3)) 3 [c.biancheng.net]$ i=5 [c.biancheng.net]$ ((i=i*2)) #可以简写为 ((i*=2))。 [c.biancheng.net]$ echo $i #使用 echo 输出变量结果时要加 $。 10

【举例2】

[c.biancheng.net]$ ((a=1+2**3-4%3)) # **是求乘方运算符 这里是2^3 [c.biancheng.net]$ echo $a 8 [c.biancheng.net]$ b=$((1+2**3-4%3)) #运算后将结果赋值给变量,变量放在了括号的外面。 [c.biancheng.net]$ echo $b 8 [c.biancheng.net]$ echo $((1+2**3-4%3)) #也可以直接将表达式的结果输出,注意不要丢掉 $ 符号。 8 [c.biancheng.net]$ a=$((100*(100+1)/2)) #利用公式计算1+2+3+...+100的和。 [c.biancheng.net]$ echo $a 5050 [c.biancheng.net]$ echo $((100*(100+1)/2)) #也可以直接输出表达式的结果。 5050

【举例3】利用 (( )) 进行逻辑运算。

[c.biancheng.net]$ echo $((3 fi yes

【实例4】利用 (( )) 进行自增(++)和自减(–)运算。

[c.biancheng.net]$ a=10 [c.biancheng.net]$ echo $((a++)) #如果++在a的后面,那么在输出整个表达式时,会输出a的值,因为a为10,所以表达式的值为10。 10 [c.biancheng.net]$ echo $a #执行上面的表达式后,因为有a++,因此a会自增1,因此输出a的值为11。 11 [c.biancheng.net]$ a=11 [c.biancheng.net]$ echo $((a--)) #如果--在a的后面,那么在输出整个表达式时,会输出a的值,因为a为11,所以表达式的值的为11。 11 [c.biancheng.net]$ echo $a #执行上面的表达式后,因为有a--,因此a会自动减1,因此a为10。 10 [c.biancheng.net]$ a=10 [c.biancheng.net]$ echo $((--a)) #如果--在a的前面,那么在输出整个表达式时,先进行自增或自减计算,因为a为10,且要自减,所以表达式的值为9。 9 [c.biancheng.net]$ echo $a #执行上面的表达式后,a自减1,因此a为9。 9 [c.biancheng.net]$ echo $((++a)) #如果++在a的前面,输出整个表达式时,先进行自增或自减计算,因为a为9,且要自增1,所以输出10。 10 [c.biancheng.net]$ echo $a #执行上面的表达式后,a自增1,因此a为10。 10

【实例5】利用 (( )) 同时对多个表达式进行计算。

[c.biancheng.net]$ ((a=3+5, b=a+10)) #先计算第一个表达式,再计算第二个表达式 [c.biancheng.net]$ echo $a $b 8 18 [c.biancheng.net]$ c=$((4+8, a+b)) #以最后一个表达式的结果作为整个(())命令的执行结果 [c.biancheng.net]$ echo $c 26 Shell let命令

【结论】 多用(()),少用let和$[] 【注意】:和双小括号 (( )) 一样,let 命令也只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。

let 表达式 let "表达式" let '表达式' 等价于 ((表达式))

【区别】

let 命令以空格来分隔多个表达式;(( )) 以逗号,来分隔多个表达式。

【经典let错误】

[c.biancheng.net]$ a=10 b=20 [c.biancheng.net]$ echo $((a+b)) 30 [c.biancheng.net]$ echo let a+b #错误,echo会把 let a+b作为一个字符串输出 let a+b [c.biancheng.net]$ echo let sum=a+b let sum=a+b

【let举例】

[c.biancheng.net]$ a=10 b=35 [c.biancheng.net]$ let a+=6 c=a+b #多个表达式以空格为分隔 [c.biancheng.net]$ echo $a $c 16 51 bc命令:一款数学计算器

Linux bc 命令可以很方便的进行浮点运算,当然整数运算也不再话下。

在终端输入bc命令,然后回车即可进入 bc 进行交互式的数学计算。在 Shell 编程中,我们也可以通过管道和输入重定向来使用 bc。

例如你不想输入 bc 命令后显示一堆没用的信息,那么可以输入bc -q: 在这里插入图片描述 在这里插入图片描述

内 置 变 量 内置变量 内置变量

变量名作 用scale指定精度,也即小数点后的位数;默认为 0,也即不使用小数部分。ibase指定输入的数字的进制,默认为十进制。obase指定输出的数字的进制,默认为十进制。last 或者 .表示最近打印的数字

【实例1】scale 变量用法举例: 精度=3 精度=10 在这里插入图片描述 【实例2】ibase 和 obase 变量用法举例: 【注意】obase 要尽量放在 ibase 前面,因为 ibase 设置后,后面的数字都是以 ibase 的进制来换算的 在这里插入图片描述

内 置 函 数 内置函数 内置函数

函数名作用s(x)计算 x 的正弦值,x 是弧度值。c(x)计算 x 的余弦值,x 是弧度值。a(x)计算 x 的反正切值,返回弧度值。l(x)计算 x 的自然对数。e(x)求 e 的 x 次方。j(n, x)贝塞尔函数,计算从 n 到 x 的阶数。

要想使用这些数学函数,在输入 bc 命令时需要使用-l选项,表示启用数学库。 在这里插入图片描述

在 一 行 中 使 用 多 个 表 达 式 在一行中使用多个表达式 在一行中使用多个表达式 只要用分号;隔开就行 在这里插入图片描述

在 Shell 中使用 bc 计算器

在 Shell 脚本中,我们可以借助管道或者输入重定向来使用 bc 计算器。

借 助 管 道 使 用 b c 计 算 器 借助管道使用 bc 计算器 借助管道使用bc计算器

管道是 Linux 进程间的一种通信机制,它可以将前一个命令(进程)的输出作为下一个命令(进程)的输入,两个命令之间使用竖线|分隔。通常情况下,一个命令从终端获得用户输入的内容,如果让它从其他地方(比如文件)获得输入,那么就需要重定向。

直接输出 bc 的计算结果:

echo "expression" | bc

将 bc 的计算结果赋值给 Shell 变量:

variable=$(echo "expression" | bc)

【举例1】

[c.biancheng.net]$ echo "3*8"|bc 24 [c.biancheng.net]$ ret=$(echo "4+9"|bc) [c.biancheng.net]$ echo $ret 13

【实例2】使用 bc 中的变量:

[c.biancheng.net]$ echo "scale=4;3*8/7"|bc 3.4285 [c.biancheng.net]$ echo "scale=4;3*8/7;last*5"|bc 3.4285 17.1425

【实例3】使用 Shell 脚本中的变量:

[c.biancheng.net]$ x=4 [c.biancheng.net]$ echo "scale=5;n=$x+2;e(n)"|bc -l 403.42879

【实例4】进制转换:

#十进制转十六进制 [mozhiyan@localhost ~]$ m=31 [mozhiyan@localhost ~]$ n=$(echo "obase=16;$m"|bc) [mozhiyan@localhost ~]$ echo $n 1F #十六进制转十进制 [mozhiyan@localhost ~]$ m=1E [mozhiyan@localhost ~]$ n=$(echo "obase=10;ibase=16;$m"|bc) [mozhiyan@localhost ~]$ echo $n 30

借 助 输 入 重 定 向 使 用 b c 计 算 器 借助输入重定向使用 bc 计算器 借助输入重定向使用bc计算器

variable=$(bc EOF > ) [c.biancheng.net]$ echo $n 30


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭