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脚本的编写是必考的项目.有的单位 ...
随机推荐
- Django drf:序列化增删改查、局部与全局钩子源码流程、认证源码分析、执行流程
一.序列化类的增.删.改.查 用drf的序列化组件 -定义一个类继承class BookSerializer(serializers.Serializer): -写字段,如果不指定source ...
- 1.Hbase集群安装配置(一主三从)
1.HBase安装配置,使用独立zookeeper,shell测试 安装步骤:首先在Master(shizhan2)上安装:前提必须保证hadoop集群和zookeeper集群是可用的 1.上传:用 ...
- Go语言中的defer
可以用作一些资源的释放. 1.在一个函数内的defer执行顺序是先写的后执行,后写的先执行(遵循栈结构) func DeferTest1(){ defer fmt.Println("我是 d ...
- Python3+Appium学习笔记06-noReset参数
百度很多文章说noReset这个参数是用来防止重复安装app的.可能这是以前的用法.目前最新版本appium默认是清除session信息,并且不会删除应用的. noReset这个参数,根据appi ...
- Java 基础 - 泛型类/泛型方法/类型通配符'?' 的用法及栗子
笔记: /**1.定义一个PairTest泛型类, 测试泛型 类 Pair的用法 * class Pair<T>{ * private T first; * private T secon ...
- Cairo
Cairo 英[ˈkaɪrəʊ] 美[ˈkaɪroʊ] n. 开罗(埃及首都); [例句]From Cairo came expressions of regret at the attac
- (四)AppScan用外部设备(ios,安卓)录制app脚本进行安全测试
一.打开AppScan,选择外部设备/客户机,点击下 二.记录代理设置,可以手动输入需要的端口号,也可以自动选择. 手机配置代理: 1.连接wifi 2.找到该wifi--高级设置--配置代理: 三. ...
- Docker常用命令行
原文出处:https://blog.csdn.net/qq_29303759/article/details/87639016 启动docker 启动docker systemctl start do ...
- 8、组件注册-@Import-给容器中快速导入一个组件
8.组件注册-@Import-给容器中快速导入一个组件 8.1 给容器中注册组建的方式 包扫描+组建标注注解(@Controller.@Service.@Repository.@Component)[ ...
- 边学边体验django
django菜鸟入门连接:http://www.runoob.com/django/django-template.html 安装以及Demo里面都有. 我边学边在电脑上演示,然后发现一些和实际不一样 ...