SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结。主要包括let、bc、expr、(())等。

1、let

使用格式:let 表达式,表达式必须是完整的表达式,即等号两边。只能赋值,不支持浮点数运算,不支持直接输出

$ var=
$ let var+= #var=12,中间不能有空格
$ let var=var+ #var=
$ let var*= #var=
$ let var/= # var=

无法计算浮点数,报错

$ var=2.5
$ let var+=
-bash: let: 2.5: 语法错误: 无效的算术运算符 (错误符号是 ".5")

2、bc

常用,支持浮点数运算

echo "1+1" | bc #
echo "1.5+1.5" | bc # 3.0
echo "3-1.2" | bc #1.8
echo "1.5*1.5" | bc #2.2
echo "10/3" | bc #
echo "scale=2;10/3" | bc #3.33

看到乘数和除数的精度不同了吗?设置其他参数测试下

echo "1.5*1.33333" | bc #1.99999
echo "1.5111111111111111111111*1.33333" | bc #2.0148097777777777777777
echo "4/5" | bc #
echo "1/2" | bc #
echo "6/5" | bc #

乘法输出结果的精度和相乘数最长的进度保持一致。整数相除结果下取整。当然,它是可以赋值的

var=$(echo "1+1"|bc) #var=2

3、expr

不支持浮点数运算,注意数字与计算符中的空格

expr  +  #
expr - #
expr \* #,注意*号前面有\,否则报错
expr / #
expr + #1+1,与预期不符
expr 1.0 + #输出语法错误
var=$(expr + ) #var=
var2=$(expr ${var} + ) #var2=

4、$(())

不支持浮点数运算,不支持窗口直接执行$(()),

var=$((1+1)) #1+1运算符前后中间是否有空格不影响计算
v1=10
v2=15
var=$((v1+v2))
var=$(($v1+$v2))
a=$(( 1 + 1.0 )) #提示语法错误

可以发现,在$(())中的变量带不带$取值符号都不影响计算。

5、awk

awk结合print的使用可以很好的各种完成数值计算,包括浮点数及精度控制。

$ awk 'BEGIN{printf 1.0/2.0}' #0.5
$ awk 'BEGIN{printf "5.2f%",10/3}' #3.33
$ var1=
$ var2=
$ awk -v v1=${var1} -v v2=${var2} 'BEGIN{printf "%5.2f\n",v1/v2}' #3.33

最后来看个实例,输出1~5的数值

#!/bin/bash

i=
MAX=
while [ ${i} -lt ${MAX} ];do
printf "${i}\n"
i=$(($i+))
done

输出结果


[ SHELL编程 ] shell编程中数值计算方法实例的更多相关文章

  1. mysql--SQL编程(关于mysql中的日期,实例,判断生日是否为闰年) 学习笔记2.1

    关于日期处理的实例: 从mysql给出的 example 这个是官方源码下载以及导入,http://dev.mysql.com/doc/employee/en/employees-installati ...

  2. shell编程系列7--shell中常用的工具find、locate、which、whereis

    shell编程系列7--shell中常用的工具find.locate.which.whereis .文件查找之find命令 语法格式:find [路径] [选项] [操作] 选项 -name 根据文件 ...

  3. shell编程系列6--shell中的函数

    shell编程系列6--shell中的函数 .函数介绍 linux shell中的函数和大多数编程语言中的函数一样 将相似的任务或者代码封装到函数中,供其他地方调用 语法格式 第一种格式 name() ...

  4. 【shell】shell编程(一)-入门

    如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux.说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的很简单.背景 什么是shell编程 ...

  5. 网络版shell之网络编程练习篇--telnet服务端

    网络版shell之网络编程练习篇--telnet服务端   以前写过一个shell命令解释器,对与shell命令解释器的执行流程有了清晰的认识,这段时间学习网络编程,至于网络编程的细节以及知识点,已经 ...

  6. 02、体验Spark shell下RDD编程

    02.体验Spark shell下RDD编程 1.Spark RDD介绍 RDD是Resilient Distributed Dataset,中文翻译是弹性分布式数据集.该类是Spark是核心类成员之 ...

  7. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  8. 能用Shell就别编程-海量文本型数据的处理

    对于txt文本类数据,优先采用shell脚本,实在不行才用Python,Java,MySQL 1) Shell命令行或脚本的处理速度极快,比Java快得多. 2) Shell代码量少,几个命令就能完成 ...

  9. .NET组件控件实例编程系列——5.DataGridView数值列和日期列

    在使用DataGridView编辑数据的时候,编辑的单元格一般会显示为文本框,逻辑值和图片会自动显示对应类型的列.当然我们自己可以手工选择列的类型,例如ComboBox列.Button列.Link列. ...

随机推荐

  1. VI使用手册(常见命令)

    VI使用手册 模式切换 i键开始进入编辑模式,Esc进入一般模式,保存退出:wq,不保存退出q,强制退出q! 如何定位到行文档首位,行首位? gg或者1G命令将光标移动到文档开头G命令将光标移动到文档 ...

  2. .net core identity(一)简单运用

    1.net core identity涉及到很多知识,很多概念包括Claims,Principal等等概念需要我们一步步学习才能掌握其原理,有两篇博客是比较好的介绍该框架的, https://segm ...

  3. C# DataGirdview手动添加数据,导出txt文件并自动对齐

    //DataGirdview手动添加数据 private void btnDataGirdView_Click(object sender,EventArgs e) {       dataGridV ...

  4. 数组.html

    <script > var arr1 = [1, 2, 3, 4, 5, 6 ]; 赋值 var arr2 =Array(1,2,3,4,5,6); var arr3 = new Arra ...

  5. python- do_excel

    # @File : class_01_do_excel.py # coding=gbk #pip install openpyxl #新建.xlsx,一定要右键新建 from openpyxl imp ...

  6. Oracle递归查询父子兄弟节点

      1.查询某节点下所有后代节点(包括各级父节点) 1 // 查询id为101的所有后代节点,包含101在内的各级父节点 2 select t.* from SYS_ORG t start with ...

  7. 【Selenium-WebDriver自学】Selenium-IDE测试创建(三)

    ==================================================================================================== ...

  8. 剑指Offer(二):替换空格

    说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...

  9. spring揭密学习笔记(3)-spring ioc容器:掌管大局的IoC Service Provider

    1.IOC service Provider的概念.IoC Service Provider在这里是一个抽象出来的概念,它可以指代任何将IoC场景中的业务对象绑定到一起的实现方式.它可以是一段代码,也 ...

  10. 基于Keras的自动驾驶技术的车轮转向角度的可视化

    This post is about understanding how a self driving deep learning network decides to steer the wheel ...