原生bash不支持简单的数学运算,即使是最简单的加减乘除

  但是,可以使用$[]和expr来实现整数运算

  如果要实现小数运算,可以使用bc命令

使用$[]来实现:

#!/bin/bash
#文件名:test.sh echo $[ 1 + 3 ] echo $[ $1 + $2 ]
echo $[ $1 - $2 ]
echo $[ $1 * $2 ] #此时不用对*转义
echo $[ $1 / $2 ]
echo $[ $1 % $2 ]

  执行脚本:

ubuntu@ubuntu:~$ ./test.sh 10 20
4
30
-10
200
0
10
ubuntu@ubuntu:~$

  主要注意的是:

    1、运算符和两边要进行计算的数值之间,有空格

    2、虽然两个方括号和要进行计算的数值之间可以没有空格,但是强烈建议增加一个空格,因为后面会学到很多时候,方括号和参数之间都有空格。

使用expr实现:

#!/bin/bash
#文件名:test.sh #expr是一个用于数值计算的命令
#此时运算符号两边必须加空格,不加空格会原样输出,不会计算
expr 1 + 3 #命令行第2个参数和第3个参数求和
expr $1 + $2
expr $1 - $2
expr $1 * $2 #失败
expr $1 \* $2 #因为乘号*在shell中有特殊的含义,所以要转义
expr $1 / $2 #除法取商
expr $1 % $2 #除法取模

  运行脚本:

ubuntu@ubuntu:~$ ./test.sh 10 20
4
30
-10
expr: syntax error
200
0
10
ubuntu@ubuntu:~$

  

  使用expr之前先了解一下反引号``的功能,反引号的功能是将反引号括起来的内容执行,没错,就是执行,这就意味着,反引号括起来的是一条命令,此时是一个命令的运行结果,而结果就是一条命令,并且反引号不能单独使用,要将包含反引号及其括起来的语句赋值给一个变量,否则出错;如果不想将其赋给一个变量,就不要用反引号,直接写反引号中的内容,因为其内容就是一条命令。

#!/bin/bash
#文件名:test.sh #此时运算符号两边必须加空格
#必须将反引号中命令的结果赋给一个变量
num=`expr 1 + 3`
echo $num #命令行第2个参数和第3个参数求和
num=`expr $1 + $2`
echo $num #乘法运算符仍要转义
num=`expr $1 \* $2`
echo $num

  运行脚本:

ubuntu@ubuntu:~$ ./test.sh 10 20
4
30
200
ubuntu@ubuntu:~$

  

使用bc进行浮点数计算

ubuntu@ubuntu:~$ echo 1.4*4 | bc  #乘号和运算数之间没有空格时,不用转义
5.6
ubuntu@ubuntu:~$ echo 1.4 \* 4 | bc #乘号和运算数之间有空格时,必须转义
5.6
ubuntu@ubuntu:~$ echo 1.5-4 | bc
-2.5

  鉴于计算时很难记错,运算符之间是否要加空格,统一推荐加,如果是乘号*,则转义。

shell脚本--数值计算的更多相关文章

  1. shell 脚本阅读之二——ltp工具下的runltp

    #!/bin/sh ################################################################################ ## ## ## ...

  2. 《Linux命令行与shell脚本编程大全》第二十一章 sed进阶

    本章介绍一些sed编辑器提供的高级特性. 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的. 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...

  3. shell的数值计算,小数计算

    shell脚本中,可以进行数值计算, 如加减乘除,通过expr.let.(())等完成,文章介绍:http://blog.csdn.net/longshenlmj/article/details/14 ...

  4. shell脚本基础教程

    一.什么是shell: shell解释:引用别人的话说:“Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.” 简而言之, ...

  5. Linux 小知识翻译 - 「Shell 脚本」

    这次说说「Shell 脚本」. 根据上回的介绍,Shell就是「作为联系Linux和用户的接口而存在的软件」.在Linux环境中,通过Shell来操作系统很普遍. 这里,考虑到有时候可能想要「多次的进 ...

  6. Linux运维之shell脚本

    一.bash漏洞 1)bash漏洞 bash漏洞是控制Linux计算机命令提示符的软件中存在的漏洞. bash是一个为GNU计划编写的Unix shell.它的名字是一系列缩写:Bourne-Agai ...

  7. Linux Shell脚本编程基础(11)

    实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程 ...

  8. Linux入门第五天——shell脚本入门(上)基本概念

    一.什么是shell脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 二.shell入门 1.先导知识 变量知识补充:https://www.cnblogs. ...

  9. (转)shell脚本之文件测试操作符及整数比较符

    shell脚本之文件测试操作符及整数比较符 原文:http://www.cnblogs.com/Steward-Xu/p/6722592.html 一.文件测试操作符: 在书写测试表达式是,可以使用一 ...

随机推荐

  1. vue项目的架构设计完善详解

    vue项目构建vuex+mock层 vue项目添加jsBridge(与原生交互的) vue项目添加代码格式化

  2. linux shell脚本调用java main方法 代码

    #!/bin/sh # #该脚本为Linux下启动java程序的通用脚本.即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用. # #Author: tuda ...

  3. OnlineJudgeFE之前端二次开发

    之前我们在这篇文章青岛大学开源OJ平台搭建 讲了关于它的安装和部署. 今天我们讨论如何对其进行二次开发.首先谈谈前端的二次开发. 如果想要对青岛大学的OJ项目进行二次开发,目前我觉得要满足这么几个要求 ...

  4. QT获取窗口大小和位置等信息

    QT窗口尺寸,窗口大小和大小改变引起的事件 QResizeEvent. 来源:http://blog.csdn.net/dbzhang800/article/details/6741344?reloa ...

  5. 在MongoDB数据库中查询数据(上)

    在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...

  6. centos7搭建logstash

    前两节已经成功完成ek的搭建,还剩最后的一个日志上传的功能 依次执行如下命令 cd /home/elk wget https://artifacts.elastic.co/downloads/logs ...

  7. python3.6小程序

    # 查询类python 3.6 pycharm中运行(唔错) people = { '王飞': { '电话': '2341', '地址': '西方镇忘川村' }, '小瘪三': { '电话': '91 ...

  8. odoo学习之弹框显示

    按条件隐藏: <xpath expr="//group[1]" position="attributes"> <attribute name= ...

  9. Sql Server插入数据并返回自增ID,@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT的区别(转载)

    预备知识:SQL Server的IDENTITY关键字IDENTITY关键字代表的是一个函数,而不是identity属性.在access里边没有这个函数,所以在access不能用这个语句.语法:ide ...

  10. CF1097F Alex and a TV Show 莫比乌斯反演、bitset

    传送门 发现自己对mobius反演的理解比较浅显-- 首先我们只需要维护每一个数的出现次数\(\mod 2\)的值,那么实际上我们只需要使用\(bitset\)进行维护,每一次加入一个数将其对应次数异 ...