在shell脚本中计算一般会涉及到let、$(())、$[]、bc(另扩展expr)。其中let、$(())、$[]都是用来做基本整数运算,bc可以用来做浮点运算。

(1).let、$(())、$[]

  因为这三个基本等价,所以放在一起说明。

  首先来看下let命令

[xf@xuexi ~]$ num=10
[xf@xuexi ~]$ echo $num
10
[xf@xuexi ~]$ let num=$num+6;echo $num
16
[xf@xuexi ~]$ let num=num-6;echo $num  //let命令中等号右边可以没有美元符号
10
[xf@xuexi ~]$ let num+=6;echo $num  //+=、-=、*=、/=分别是自加、自减、自乘、自除
16
[xf@xuexi ~]$ let num-=6;echo $num
10

  再看$(())

[xf@xuexi ~]$ num=10
[xf@xuexi ~]$ echo $num
10
[xf@xuexi ~]$ num=$((num+6));echo $num  //也可以num=$((num+=6))
16
[xf@xuexi ~]$ num=$((num-6));echo $num
10

  最后看$[]

[xf@xuexi ~]$ num=10
[xf@xuexi ~]$ echo $num
10
[xf@xuexi ~]$ num=$[num+6];echo $num
16
[xf@xuexi ~]$ num=$[num-6];echo $num
10

  注意:$(())和$[]可以直接使用在命令中,而let则不行

[xf@xuexi ~]$ num=10
[xf@xuexi ~]$ echo $((num+6))
16
[xf@xuexi ~]$ echo $[num+6]
16

(2).bc

  bc命令是用来做浮点运算,也就是小数点运算。

[xf@xuexi ~]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.   //以上抬头可以使用-q命令省略
num =10  //bc命令里可以另外定义变量
num*5
50 5/3
1  //这里之所以为整数,是因为没有设置小数位数
scale=2  //设置小数的位数为2位
5/3
1.66 quit  //退出

  上面都是在命令行中使用,如果想要使用到脚本当中需要借助echo命令来使用,如下:

[xf@xuexi ~]$ vim a.sh
[xf@xuexi ~]$ cat a.sh
#!/bin/bash
num=10
echo "scale=2;$num/3" | bc
[xf@xuexi ~]$ sh a.sh
3.33

(3).扩展expr

  expr可以对数字进行基本运算,也可以做比较,还可以对字符串进行操作。

  首先使用expr进行基本运算,注意乘号(*)需要转义,数字与符号之间必须使用空格隔开

[xf@xuexi ~]$ expr 5 + 2
7
[xf@xuexi ~]$ expr 5 - 2
3
[xf@xuexi ~]$ expr 5 * 2
expr: 语法错误
[xf@xuexi ~]$ expr 5 \* 2
10
[xf@xuexi ~]$ expr 5 / 2
2
//下面是错误的格式
[xf@xuexi ~]$ expr 5+1
5+1
[xf@xuexi ~]$ expr 5 * 1
expr: 语法错误

  接着进行数字的比较,注意输出0表示假(错误),输出1表示真(正确),大小于号需要转义,数字与符号之间一样需要用空格隔开

[xf@xuexi ~]$ expr 5 \>  1
1
[xf@xuexi ~]$ expr 5 \< 1
0
[xf@xuexi ~]$ expr 5 = 1
0
[xf@xuexi ~]$ expr 5 != 1
1
//下面是错误的格式
[xf@xuexi ~]$ expr 5 > 1
[xf@xuexi ~]$ expr 5\>1
5>1

  最后看对字符串的处理,可以使用"length [字符串]"来统计字符串长度;也可以使用"substr [偏移量] [长度]"截取指定的字符,偏移量从1开始;

[xf@xuexi ~]$ expr length "hello world"
11
[xf@xuexi ~]$ expr substr "hello world" 2 3  //2表示从第2位开始,3表示截取3位字符
ell

  

shell脚本中用到的计算的更多相关文章

  1. 通过在shell脚本中用scp或rsync实现远程同步文件

    通过在shell脚本中用expect实现远程scp文件  shell expect的简单用法 http://myunix.blog.51cto.com/191254/1095074 http://ji ...

  2. shell脚本,利用awk计算指定范围内的和。

    期望得到结果如下: vivi 42800Tom 32500John 104500 解题方法如下: 1.利用数组来进行解题.

  3. linux 的基本操作(编写shell 脚本)

    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...

  4. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  5. shell脚本学习(一)

    Shell脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型.特定的工作. Shell的特点有: 1. 简单性 2. 可移植性 3. 开发容易 [什么是shell] 简单点理解,就是系统跟计算 ...

  6. Linux Shell脚本编程--curl命令详解

    用途说明 curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件.其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息.类 ...

  7. linux的基本操作(shell 脚本的基础知识)

    shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...

  8. 学习shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...

  9. shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...

随机推荐

  1. jade-mixin 代码的重用

    有时候页面有好多个区块,比如列表区块,但是他们代码结构又是一模一样的怎么弄?jade天生就是节约成本,节约时间的,mixin就是让代码块可以重用的函数   mixin lession p jade s ...

  2. TensorFlow utils

    1. def model_stats(): print("============================================================" ...

  3. mysql全量和增量备份详解(带脚本)

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...

  4. Week08_day01 (Hive 自定义函数 UDF 一个输入,一个输出(最常用))

    当我们进入企业就会发现,很多时候,企业的数据都是加密的,我们拿到的数据没办法使用Hive自带的函数去解决,我们就需要自己去定义函数去查看,哈哈,然而企业一般不会将解密的代码给你的,只需要会用,但是我们 ...

  5. Selenium(八)测试用例的设计与模块化

    一.设计测试用例 1.分析我之前写的登录脚本: from selenium import webdriver import time from selenium.webdriver.common.ac ...

  6. Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>

    引言 前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用. 首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储 ...

  7. python-windows安装相关问题

    1.python的环境配置,有些时候是没有配置的,需要在[系统环境]-[path]里添加. 2.安装pip:从官网下载pip包,然后到包目录==>python setup.py install  ...

  8. ServletContextListener和ServletContext

    web开发中,每个人都必须要深刻掌握的技能——servlet,学习servlet,就必然要理解ServletContext(javax.servle.ServletContext)接口. 先让我们看下 ...

  9. Maven+Docker 部署

    Maven+Docker 部署 安装jdk8镜像 docker pull openjdk:8-jdk-alpine maven插件推送方式 修改/etc/docker/daemon.json文件,加入 ...

  10. 给json数组添加新字段并赋值

    zNodes.forEach(function(item) { item.newtitle ="点击加号设为主席会场"; });