首页 > 系统相关 >Bash shell中四种算术运算方式的区别与联系简介

Bash shell中四种算术运算方式的区别与联系简介

时间:2024-01-14 11:06:52浏览次数:28  
标签:shell 运算 简介 echo 7.2 GeekDevOps expr root Bash


在bash shell中,整数的运算也会偶尔遇到。为了彻底弄清其中的奥秘,我们通过实例验证的方式来探索一下常见的四种运算中的区别与联系。实例验证之前,我们来定义一组变量,并对其赋值:

[root@GeekDevOps ~]# a=9;b=13;c=-1;d=+4;e=7.2
[root@GeekDevOps ~]# echo $a $b $c $d $e
9 13 -1 +4 7.2

一、expr

[root@GeekDevOps ~]# echo `expr $a + $b`
22
[root@GeekDevOps ~]# echo `expr $c + $d`
expr: 非整数参数
[root@GeekDevOps ~]# echo `expr $c + $b`
12
[root@GeekDevOps ~]# echo `expr $a + $d`
expr: 非整数参数
[root@GeekDevOps ~]# echo `expr $a + $e`
expr: 非整数参数

从以上例子中我们可以看出,使用expr来进行数字运算时,不支持浮点类型的数字计算,也不支持带符号+的运算,支持整数运算(包括带符号-的运算)。另外,需要特别注意的是expr后面的变量与命令expr之间及变量与运算符之间必须使用空格隔开。此处的引号为ESC下方的按键,不是通常的单引号。

二、小括号

[root@GeekDevOps ~]# echo $a $b $c $d $e
9 13 -1 +4 7.2
[root@GeekDevOps ~]# echo $((a+b))
22
[root@GeekDevOps ~]# echo $((c+d))
3
[root@GeekDevOps ~]# echo $((a+d))
13
[root@GeekDevOps ~]# echo $((a+c))
8
[root@GeekDevOps ~]# echo $((a+e))
-bash: 7.2: 语法错误: 无效的算术运算符 (错误符号是 ".2")

从以上例子中我们可以看出,采用小括号这种运算方式,完美的支持有符号及无符号的整数运算,不支持浮点类型的数学运算。需要特别注意的是,需要使用双层小括号来将运算表达式结果括起来才能得到正确的运算结果。

三、中括号

[root@GeekDevOps ~]# echo $a $b $c $d $e
9 13 -1 +4 7.2
[root@GeekDevOps ~]# echo $[a+b]
22
[root@GeekDevOps ~]# echo $[a+c]
8
[root@GeekDevOps ~]# echo $[a+d]
13
[root@GeekDevOps ~]# echo $[a+e]
-bash: 7.2: 语法错误: 无效的算术运算符 (错误符号是 ".2")
[root@GeekDevOps ~]# echo $[c+d]
3

从以上例子中我们可以看出,采用中括号与小括号没有很大的差异,只是书写方式不一样而已。

四、let

[root@GeekDevOps ~]# echo $a $b $c $d $e
9 13 -1 +4 7.2
[root@GeekDevOps ~]# let x=a+b
[root@GeekDevOps ~]# echo $x
22
[root@GeekDevOps ~]# let x=a+c
[root@GeekDevOps ~]# echo $x
8
[root@GeekDevOps ~]# let x=a+d
[root@GeekDevOps ~]# echo $x
13
[root@GeekDevOps ~]# let x=a+e
-bash: let: 7.2: 语法错误: 无效的算术运算符 (错误符号是 ".2")
[root@GeekDevOps ~]# let x=c+d
[root@GeekDevOps ~]# echo $x
3

从以上例子中,我们可以看到,使用let命令来进行算术运算与小括号及中括号无较大差异,仅仅存在书写差异而已。

五、总结

以上例子中为了节约篇幅,仅仅以加法运算来进行实验。在bash shell中还支持减法(-)、乘法(*)、除法(/)、求余(%)等运算,其运算规则及方式大同小异,不一一介绍。特别需要注意的是在使用expr进行乘法运算时,“*”号需要进行转义否则会出错。

[root@GeekDevOps ~]# echo `expr $b \* $a`
117


标签:shell,运算,简介,echo,7.2,GeekDevOps,expr,root,Bash
From: https://blog.51cto.com/ivandu/9238975

相关文章

  • 存储进阶:RAID简介
    一、什么是RAID磁盘阵列(RedundantArraysofIndependentDisks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。也就是说把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效......
  • Bash shell中bash、sh、source及“.”点等五种执行方式的区别与联系
    在众多Linux发行版中bashshell可谓是随处可见。作为众多发行版的首选shell,对于bashshell的学习对我们来说,显得格外重要。在学习bashshell的过程中,bash、sh、source及英文输入状态下的点号经常交替出现,他们看起来作用都差不多,但是深究下去,他们也有着不小的区别与联系。下面就让......
  • 【Shell基础】Bash基础与Linux三剑客
    shell是什么?可以做哪些?Shell是⼀种解释性的语⾔,适⽤于基本的逻辑处理和不追求速度的应⽤。用于:人机交互批处理Unix、Linux、Mac、Android、IOS脚本自动化工作场景服务端测试移动测试持续集成与自动化部署shell种类bashshzshwindows没有/etc/shells,需要安......
  • 【Powershell】管理DHCPServer
    欢迎购买课程:https://edu.51cto.com/course/35515.html适合人群:对Powershell和域控有一定基础和感兴趣的运维你将会学到:利用Powershell创建和管理DHCPServer课程简介:本课程将教你利用Powershell创建和管理DHCPServer,特别是管理DHCPFailover,详解故障转移中的负载均衡和热备模式的差......
  • 【Powershell】域用户提权
    适合人群:适合对Powershell和域有一定基础和感兴趣的运维。课程目标:利用Powershell和计划任务让普通用户能用管理员权限执行程序或脚本课程简介:以往都需要借助收费第三方软件来完成的事情,现在可以通过强大的Powershell完成。利用Powershell和计划任务让普通用户能用管理员权限执行......
  • 01_STM32简介
    STM32简介简介ARMSTM32F103C8T6片上资源/外设命名规则系统结构引脚定义启动配置最小系统电路......
  • 无涯教程-LISP - 简介
    Lisp(历史上拼写为LISP)是具有悠久历史的计算机编程语言家族,有独特和完全括号的前缀符号表示法。起源于公元1958年,是现今第二悠久而仍广泛使用的高端编程语言。只有FORTRAN编程语言比它更早一年。Lisp编程语族已经演变出许多种方言。现代最著名的通用编程语种是Clojure、CommonLis......
  • Shell编程自动化之if、for、while和函数
    一、if语句1.单分支格式if[条件判断式];then当条件判断成立时,执行的命令内容fiif[条件判断式]then当条件判断成立时,执行的命令内容fi2.双分支格式if[条件判断式];then当条件判断成立时,执行的命令内容else当条件判断......
  • Shell编程自动化之Shell编程基础
    一、Shell可以用来做什么1.自动化批量系统初始化程序;2.自动化批量软件部署程序;3.应用程序管理;4.日志分析处理程序;5.自动化备份恢复程序;6.自动化信息采集及监控程序;7.自动化管理程序;二、Shell概述1.Shell是操作系统的外壳,是用户操作系统的命令接口,是一个介于用户和系统内核......
  • 绕过安全限制,通过cmd执行PowerShell脚本(2)
    之前的做法是将PowerShell脚本的代码拼接成一个大字符串,然后通过在cmd中运行powershell去直接运行。现在觉得,多少有些脱裤子放屁。其实可以直接在cmd中设置脚本运行策略。改进后的脚本如下:首先是run.bat@echooffFOR/F"tokens=*USEBACKQ"%%FIN(`powershellGet......