shell脚本编程笔记(二)—— 执行数学运算
数学运算在编程中也很重要,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脚本编程笔记(二)—— 执行数学运算相关推荐
- shell脚本编程笔记(十二)—— gawk程序
一. 简介 虽然sed是非常方便自动修改文本文件的工具,但其也有自身的限制.通常你需要一个用来处理文件中的数据的更高级工具,它能提供一个类编程环境来修改和重新组织文件中的数据,这正是gawk能够做到的 ...
- shell脚本编程笔记(十)—— 正则表达式
一. 定义 正则表达式是你所定义的模式模板 (pattern template),利用通配符来描述数据流中的一个或多个字符.Linux工具(比如sed或gawk)能够在处理数据时用它对数据进行模式匹配 ...
- 个人整理shell脚本编程笔记
一.脚本格式 vim shell.sh #!/bin/bash //声明脚本解释器,这个'#'号不是注释,其余是注释 #Program: //程序内容说明 #History: //时间和作者 二.sh ...
- shell脚本编程笔记(九)—— 初识流编辑器 sed
一. 流编辑器 sed编辑器被称作流编辑器(stream editor).在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入.删除或替换数据中的文本.流编辑器则基于预先提供的一组命令来 ...
- linux读取环境变量替换,linux Shell脚本学习笔记二(变量和环境变量)
2.变量和环境变量 使用env命令在终端中查看所有与此终端进程相关的环境变量.对于每个进程,在起运行时的环境变量可以使用下面的命令来查看: cat /proc/$PID/environ 其中,将PID ...
- linux shell脚本编程笔记(三): 三种引号的区别
双引号.单引号.反引号的区别 测试用例: OPDATE=`date -d '-1 day' +%Y%m%d` for i in $(seq 10) do FILEDATE=`date -d " ...
- 《Linux命令行与shell脚本编程大全》(第三版)读书笔记
第一部分 Linux命令行 第三章.基本的bash shell命令 bash手册 man 命令 例子: man cat 空格翻页.回车下一行.左右键看右侧(左侧)内容.q退出 info info in ...
- linux脚本求命令行上整数和,《Linux命令行与shell脚本编程大全》 第二十二章 学习札记...
<Linux命令行与shell脚本编程大全> 第二十二章 学习笔记 第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系 ...
- linux命令行和shell脚本编程大全笔记
第1章 初识Linux shell 内存存储单元按组划分成很多块,这些块称作页面(page) Linux操作系统将运行中的程序称为进程.进程可以在前台运行,将输出显示在屏幕上,也 可以在 ...
最新文章
- ESXi主机与网络中其他主机的网咯数据包捕获
- Django学习(2)数据宝库
- [js高手之路]打造通用的匀速运动框架
- 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理
- 纪念我2014.1.4 中国银行广东分行面试
- 测试面试题集-Python花式打印九九乘法口诀表
- OpenGL基础4:最基础的单元 —— 三角形
- 翻译 - 【Dojo Tutorials】Part 2 - Developing a Dojo Mobile Application: FlickrView
- 如何选择合适的大数据分析平台的类型
- 2只老虎c语言课程设计,中班两只老虎教案
- 一个简单的可视化模型战士的 XML 编辑器QXmlEdit
- catia刨面命令_CATIA建模技巧之分割、剖切、右键属性
- 我打算学计算机学英语,英语人教版八年级上册我打算学习计算机科学.doc
- GB28181 PS流传输格式详解
- 2021年在线教育发展趋势
- 排列组合 离散数学_排列组| 离散数学
- Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络 Ⅰ—— 基础概念
- STM32理论 —— DAC、DMA
- 破茧成蝶——我的北大之路(文/贺舒婷)
- 计算机设备耗材管理,计算机耗材管理办法