数学运算在编程中也很重要,shell对它的支持并不算好,本文整理一下shell进行数学运算的途径,各种方法的缺点。

一、 expr命令

shell最开始处理数学表达式的命令,可以在命令行做算术运算,参数与运算符间一定要有空格,否则无法识别

expr arg1 运算符 arg2

可以将数学表达式结果赋值给一个变量

对于Linux的一些特殊字符,它无法识别,需要使用转义字符。

由于expr命令比较笨拙,经常无法识别符号,bash引入了一种更简单的方法执行数学表达式

二、 使用$[]做算术运算

将数学表达式放在$[]中,bash便不会将其识别为特殊符号。

但bash shell有一个致命的缺点,它只支持整数运算,使用浮点数会报错

三、 bash计算器bc

有几种解决方案能处理bash只支持整数运算的问题,其中最常用的是内建bash计算器bc。

1. bc的基本用法

bc实际上是一种编程语言,它允许在命令行中输入浮点表达式,然后解释并计算表达式,最后返回结果。

bc能够识别:数字(整数与浮点数)、变量、注释、表达式、编程语句(如if-then)、函数

浮点运算由内建变量scale控制,表示希望在计算结果中保留的小数位数。如果不设置,可能会得到错误结果。

bc中支持定义和使用变量,可使用print命令显示变量值,但变量仅在bc内可见

2. 在脚本中使用bc

利用管道 | 将表达式传送给bc,并将计算结果赋值给变量

var=$(echo "options; expression" | bc)
#或
var=`echo "options; expression" | bc`#例如
var=$(echo "scale=2; 5/2" | bc)
echo $var

也可以直接计算变量值,例如 $var1 * $var2 + $var3 * $var4

#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(echo "scale=2; $var1*$var2+$var3*$var4" | bc)
echo The final answer is $var5

3. 使用内联输入重定向

对于复杂运算,可以使用内联输入重定向,直接在命令行中重定向数据,更加清晰明了。

var=$(bc << EOF
options
statements
expression
EOF
)

例如

#!/bin/bashvar1=10.46
var2=43.67
var3=33.2
var4=71var5=$(bc << EOF
scale = 4
a1 = ($var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)echo The final answer is $var5

参考:《Linux命令行与shell脚本编程大全》

shell脚本编程笔记(二)—— 执行数学运算相关推荐

  1. shell脚本编程笔记(十二)—— gawk程序

    一. 简介 虽然sed是非常方便自动修改文本文件的工具,但其也有自身的限制.通常你需要一个用来处理文件中的数据的更高级工具,它能提供一个类编程环境来修改和重新组织文件中的数据,这正是gawk能够做到的 ...

  2. shell脚本编程笔记(十)—— 正则表达式

    一. 定义 正则表达式是你所定义的模式模板 (pattern template),利用通配符来描述数据流中的一个或多个字符.Linux工具(比如sed或gawk)能够在处理数据时用它对数据进行模式匹配 ...

  3. 个人整理shell脚本编程笔记

    一.脚本格式 vim shell.sh #!/bin/bash //声明脚本解释器,这个'#'号不是注释,其余是注释 #Program: //程序内容说明 #History: //时间和作者 二.sh ...

  4. shell脚本编程笔记(九)—— 初识流编辑器 sed

    一. 流编辑器 sed编辑器被称作流编辑器(stream editor).在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入.删除或替换数据中的文本.流编辑器则基于预先提供的一组命令来 ...

  5. linux读取环境变量替换,linux Shell脚本学习笔记二(变量和环境变量)

    2.变量和环境变量 使用env命令在终端中查看所有与此终端进程相关的环境变量.对于每个进程,在起运行时的环境变量可以使用下面的命令来查看: cat /proc/$PID/environ 其中,将PID ...

  6. linux shell脚本编程笔记(三): 三种引号的区别

    双引号.单引号.反引号的区别 测试用例: OPDATE=`date -d '-1 day' +%Y%m%d` for i in $(seq 10) do FILEDATE=`date -d " ...

  7. 《Linux命令行与shell脚本编程大全》(第三版)读书笔记

    第一部分 Linux命令行 第三章.基本的bash shell命令 bash手册 man 命令 例子: man cat 空格翻页.回车下一行.左右键看右侧(左侧)内容.q退出 info info in ...

  8. linux脚本求命令行上整数和,《Linux命令行与shell脚本编程大全》 第二十二章 学习札记...

    <Linux命令行与shell脚本编程大全> 第二十二章 学习笔记 第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系 ...

  9. linux命令行和shell脚本编程大全笔记

    第1章        初识Linux shell 内存存储单元按组划分成很多块,这些块称作页面(page) Linux操作系统将运行中的程序称为进程.进程可以在前台运行,将输出显示在屏幕上,也 可以在 ...

最新文章

  1. ESXi主机与网络中其他主机的网咯数据包捕获
  2. Django学习(2)数据宝库
  3. [js高手之路]打造通用的匀速运动框架
  4. 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理
  5. 纪念我2014.1.4 中国银行广东分行面试
  6. 测试面试题集-Python花式打印九九乘法口诀表
  7. OpenGL基础4:最基础的单元 —— 三角形
  8. 翻译 - 【Dojo Tutorials】Part 2 - Developing a Dojo Mobile Application: FlickrView
  9. 如何选择合适的大数据分析平台的类型
  10. 2只老虎c语言课程设计,中班两只老虎教案
  11. 一个简单的可视化模型战士的 XML 编辑器QXmlEdit
  12. catia刨面命令_CATIA建模技巧之分割、剖切、右键属性
  13. 我打算学计算机学英语,英语人教版八年级上册我打算学习计算机科学.doc
  14. GB28181 PS流传输格式详解
  15. 2021年在线教育发展趋势
  16. 排列组合 离散数学_排列组| 离散数学
  17. Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络 Ⅰ—— 基础概念
  18. STM32理论 —— DAC、DMA
  19. 破茧成蝶——我的北大之路(文/贺舒婷)
  20. 计算机设备耗材管理,计算机耗材管理办法

热门文章

  1. java false 0_Java中false指的是1还是0
  2. Python爬取去哪了旅游景点数据
  3. 超市使用erp系统有哪些优势?
  4. 如何快速制作名片/卡片式报表
  5. oracle数据泵的原理,oracle 数据泵 详解
  6. 使用simsun的黑体
  7. countif表格函数使用
  8. 【牛客网】C语言入门 - CC3 编写函数实现两数交换(指针方式)
  9. 相对布局RelativeLayout音乐播放器界面
  10. extjs实现组织架构图_11月22日【上海站】16大案例解读OD组织发展