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. Navicat 12 破解方法

    1.按步骤安装Navicat Premium,如果没有可以去官网下载:http://www.navicat.com.cn/download/navicat-premium 2.安装好后下载激活文件:h ...

  2. java下载excel,excel从数据库获取数据

    <!-- poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId&g ...

  3. 第11章 拾遗1:网络地址转换(NAT)和端口映射

    1. 网络地址转换(NAT) 1.1 NAT的应用场景 (1)应用场景:允许将私有IP地址映射到公网地址,以减缓IP地址空间的消耗 ①需要连接Internet,但主机没有公网IP地址 ②更换了一个新的 ...

  4. sbt 以及 IDEA sbt 插件安装配置教程(转)

    1. 在Windows中安装sbt 下载 官网: http://www.scala-sbt.org/ github: https://github.com/sbt/sbt/releases/downl ...

  5. elasticsearch 外网访问9200端口访问

    可以访问127.0.0.1:9200,但不能访问 公网IP:9200 后面ip就是127.0.0.1的局域网ip,如何解决? 修改配置文件 config/elasticsearch.yml netwo ...

  6. studio2.3app签名打包安装失败,找不到签名证书。

    Androidstudio升级到2.3后,打包时和之前不一样了. 如果只选择V2,是未签名的.所以要把V1和V2都打勾.

  7. bzoj3252: 攻略(贪心)

    /* 因为权值都是正的, 所以贪心的正确性能保证 然后重链贪心跑一下就好了 */ #include<cstdio> #include<algorithm> #include&l ...

  8. linux rabbitmq 远程登录

    ./rabbitmqctl add_user admin1 admin1 ./rabbitmqctl set_user_tags admin1 administrator ./rabbitmqctl ...

  9. chattr和lsattr命令的使用(对于root用户也无法修改删除的操作问题)

    1.chattr命令的用法:chattr [+-=] [ASacdistu] File/Directory 参数说明: +-= :分别为 [+ 增加] [- 减少] [= 设定] 属性的意思 A :当 ...

  10. 【转】【Web测试】Web测试点页面总结整理

    转自:http://blog.csdn.net/qq_30044187/article/details/52442518 1.页面链接检查: 测试每一个链接是否都有对应的页面,并且页面之前可以正确切换 ...