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. 在线学习和在线凸优化(online learning and online convex optimization)—基础介绍1

    开启一个在线学习和在线凸优化框架专题学习: 1.首先介绍在线学习的相关概念 在线学习是在一系列连续的回合(rounds)中进行的: 在回合,学习机(learner)被给一个question:(一个向量 ...

  2. system调用导致子进程socket句柄泄漏问题分析

    问题引出:A进程与B进程各自独立,都是服务器进程,常驻系统,互不相干.在某次重启A进程后,发现由于固定监听的端口被占用而无法启动.检查,发现是B进程占用了该端口,检查B进程代码,没有相关的打开该固定端 ...

  3. 自动化工具gulp搭建环境(详解)

    src:读取文件和文件夹       dest:生成文件(写文件)       watch:监控文件       task:定制任务         pipe:以流的方式处理文件 bower的安装和使 ...

  4. 在Linux命令行执行python命令

    在Linux的命令行执行python的某些命令: [root@centos7 ~]# echo "import sys ;print(sys.path)"|python3.6 [' ...

  5. UiAutomator 代码记录 : 遍历桌面

    package test_one; import java.lang.*; import java.io.File; import com.android.uiautomator.core.UiDev ...

  6. aptana studio 使用技巧整理

    aptana studio 使用技巧整理 https://192.168.1.16/web/punica/adaptana studio 使用技巧整理http://uedfans.cn/ 推荐一个网站 ...

  7. python中的partition、rpartition

    partition()从左向右寻找,以字符串中的某个元素为中心将左右分割共分割成三个元素并放入到元组中 partition()从右向左寻找,以字符串中的某个元素为中心将左右分割共分割成三个元素并放入到 ...

  8. python中的clear

    1 a = { 2 "name":"dlrb", 3 "age":25, 4 "height":168 5 } 6 a. ...

  9. 40. 数据泵导入导出impdp、expdp

    一.查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)select * from dba_directories; 二.创建逻辑目录,该命令不会在 ...

  10. Android DBFlow学习及示例

    项目地址:Kotlin-DBflow-example Kotlin-DBflow-example DBFlow是一个功能强大的,非常简单的,带有注解处理的ORM Android数据库.github地址 ...