shell脚本中用到的计算
在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脚本中用到的计算的更多相关文章
- 通过在shell脚本中用scp或rsync实现远程同步文件
通过在shell脚本中用expect实现远程scp文件 shell expect的简单用法 http://myunix.blog.51cto.com/191254/1095074 http://ji ...
- shell脚本,利用awk计算指定范围内的和。
期望得到结果如下: vivi 42800Tom 32500John 104500 解题方法如下: 1.利用数组来进行解题.
- linux 的基本操作(编写shell 脚本)
终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...
- 学习 shell脚本之前的基础知识
转载自:http://www.92csz.com/study/linux/12.htm 学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...
- shell脚本学习(一)
Shell脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型.特定的工作. Shell的特点有: 1. 简单性 2. 可移植性 3. 开发容易 [什么是shell] 简单点理解,就是系统跟计算 ...
- Linux Shell脚本编程--curl命令详解
用途说明 curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件.其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息.类 ...
- linux的基本操作(shell 脚本的基础知识)
shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...
- 学习shell脚本之前的基础知识
日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...
- shell脚本之前的基础知识
日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...
随机推荐
- 用js刷剑指offer(数值的整数次方)
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 牛客网链接 思路 快速幂算法,举个例 ...
- kafka相关
一.消息队列优点(解耦.异步.削峰)二.用消息队列都有什么优点和缺点?三.kafka.activemq.rabbitmq.rocketmq都有什么区别四.如何保证消息队列的高可用啊?五.如何保证消息不 ...
- 3.使用webpack配置文件webpack.confg.js配置打包文件的入口和出口
在项目根目录下新建webpack.config.js文件 webpack.config.js文件配置如下: // Node的路径操作使用的是path模块 const path=require('pat ...
- MFC消息路由
1.Command Routing(命令传递):当消息进来时,会有一个泵推动它前进.消息如何进来,以有泵函数如何推动,都是属于windows程序设计的范畴, 消息如果是从子类流向父类(纵向流动),那么 ...
- Java8-ConcurrentHashMap
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ForkJoinPool; public clas ...
- [Debug] Dev tool Pause on caught exception
Chrome dev tool has "Pasue on caught exceptions" which is useful when there is expection t ...
- CF940F Machine Learning 带修改莫队
题意:支持两种操作:$1.$ 查询 $[l,r]$ 每个数字出现次数的 $mex$,$2.$ 单点修改某一位置的值. 这里复习一下带修改莫队. 普通的莫队中,以左端点所在块编号为第一关键字,右端点大小 ...
- Ubuntu18.04安装和配置Django,并实现简单示例
一.前言(系统,django介绍,window.mac.linux简单区别) Django是python开发过程最重要的web框架.因为在看的Django教学视频是在mac下安装的,我自己用的是Lin ...
- alarm函数
alarm函数 设置定时器(闹钟).在指定seconds后,内核会给当前进程发送14)SIGALRM信号.进程收到该信号,默认动作终止. 每个进程都有且只有唯一个定时器. unsigned int a ...
- c#递归读取菜单树
1.查询菜单节点下所有子节点id List<sys_module> menus = new List<sys_module>() { }; public async Task& ...