上篇我们学会了如何使用及定义变量。按照尿性,一般接下来就该学基本数据类型的运算了。

没错,本篇就仍是这么俗套的来讲讲这无聊但又必学的基本数据类型的运算了。

基本数据类型运算

操作符

符号 语义 描述
+ 10+10,结果为20
- 10-3, 结果为7
* 10*2,结果为20
/ 10/3, 结果为3(取整数)
% 求余 10%3, 结果为1 (取余数)
== 判断是否相等 两数相等返回1,否则0
!= 判断是否不等 两数不等返回1,否则0
> 大于 前者大于后者返回1,否则0
>= 大于或等于 前者大于或等于后者返回1,否则0
< 小于 前者小于后者返回1,否则0
<= 小于或等于 前者小于或等于后者返回1,否则0

上述操作符与其它语言相比,并无特殊之处。

在shell中,对于基本数据类型的运算主要分为两种,整数运算浮点数(小数)运算。下面就分别来看看这两种运算:

整数运算

在shell中,有两种方式能实现整数运算,一种是使用expr命令, 另外一种是通过方括号($[])来实现。下面分别来看看:

expr

#!/bin/bash
#输出13
expr 10 + 3 #输出10+3
expr 10+3 #输出7
expr 10 - 3 #输出30
expr 10 \* 3 #输出3
expr 10 / 3 #输出1
expr 10 % 3 #将计算结果赋值给变量
num1=$(expr 10 % 3) #将计算结果赋值给变量
num2=`expr 10 % 3`

注意:

  1. 在以上的乘法(*)中,我们用了反斜线(\)来转义,不然会报错。

  2. 运算符前后必须还有空格,否则会被直接当作字符串返回。

  3. 如果要将计算结果保存到变量,就需要用到我们上篇文章讲到的那两种方式($() 或者 ``)来替换命令了。

这种种迹象无不让人吐槽啊。幸好还有一种实现方式,那就是接下来要看的方括号。

方括号($[])

#!/bin/bash
num1=10
num2=3
#输出num1 + num2=13
echo "num1 + num2=$[$num1 + $num2]" #输出num1+num2=13
echo "num1+num2=$[$num1+$num2]" #输出num1 - num2=7
echo "num1 - num2=$[$num1 - $num2]" #输出num1 * num2=30
echo "num1 * num2=$[$num1 * $num2]" #输出num1 > num2=1
echo "num1 > num2=$[$num1 > $num2]" #输出num1 < num2=0
echo "num1 < num2=$[$num1 < $num2]" #将运算结果赋值给变量,输出num3=3
num3=$[$num1 / $num2]
echo "num3=$num3"

看了这种运算,再回看expr, 是不是觉得要升天,终于正常了。expr的那几个注意事项,在这儿都不算事儿。所以,如果要图简单,还是用这种方式吧。

浮点运算

在shell中,做浮点运算一般是用bash的计算器(bc)。在shell脚本中,一般我们的使用方法是:

variable=$(echo "options; expression" | bc)

options是bc的一些选项,例如: 可以通过scale去设置保留的小数位数。具体有哪些参数,可以man bc进行查看

expression就是我们具体的表达式,例如 10 * 3

" | " 这个符号,对于熟悉linux系统的人来说,这个再熟悉不过了。它叫做管道, 之所以会叫做管道,其实很形象,你可以把它看作一根水管,水管一头接入前一个命令的返回结果, 一头接入下一个命令。表示将前一个命令的执行结果作为后一个命令的参数输入。以上,表示将我们的表达式作为bc的参数输入。

#!/bin/bash
#表示 10/3, 保留2位小数,将结果赋值给了num, 输出3.33
num=$(echo "scale=2; 10 / 3" | bc)
echo $num

小结

本篇比较无聊,简单介绍了shell的基本运算符及其运算。shell运算主要分为整型和浮点型的运算。整型又有两种实现方式,浮点型是通过使用bash内置的计算器(bc)来实现的。

好啦,到此,我们学习了shell的变量的使用,也学习了基本数据类型变量的计算啦!挺简单吧


我的独立博客: javafan.cn

shell编程其实真的很简单(二)的更多相关文章

  1. shell编程其实真的很简单(一)

    如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux.说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的很简单. 背景 什么是shell编 ...

  2. shell编程其实真的很简单(四)

    上篇我们学习了shell中条件选择语句的用法.接下来本篇就来学习循环语句.在shell中,循环是通过for, while, until命令来实现的.下面就分别来看看吧. for for循环有两种形式: ...

  3. shell编程其实真的很简单(五)

    通过前几篇文章的学习,我们学会了shell的基本语法.在linux的实际操作中,我们经常看到命令会有很多参数,例如:ls -al 等等,那么这个参数是怎么处理的呢? 接下来我们就来看看shell脚本对 ...

  4. shell编程其实真的很简单(三)

    通过前两篇文章,我们掌握了shell的一些基本写法和变量的使用,以及基本数据类型的运算.那么,本次就将要学习shell的结构化命令了,也就是我们其它编程语言中的条件选择语句及循环语句. 不过,在学习s ...

  5. HTTP真的很简单

    原文:HTTP Made Really Easy因为我本身网络基础就很差,所以看到这篇文章一方面是学习网络知识,另一方面为了锻炼我蹩脚的英语水平,文中如有错误,欢迎浏览指正! 前言 在看这篇文章的时候 ...

  6. HTTP真的很简单(转)

    原文:HTTP Made Really Easy因为我本身网络基础就很差,所以看到这篇文章一方面是学习网络知识,另一方面为了锻炼我蹩脚的英语水平,文中如有错误,欢迎浏览指正! 前言 在看这篇文章的时候 ...

  7. zabbix真的很简单 (安装篇)

    系统环境: Centos 6.4 一直觉得 zabbix 很简单,但是还是有好多人看了好多文档都搞不明白怎么用,我从2013年使用到现在也小有心得,如果时间允许,很高兴与大家一起分享我在使用过程中的一 ...

  8. 如果你这么去理解HashMap就会发现它真的很简单

    Java中的HashMap相信大家都不陌生,也是大家编程时最常用的数据结构之一,各种面试题更是恨不得掘地三尺的去问HashMap.HashTable.ConcurrentHashMap,无论面试题多么 ...

  9. 【shell编程基础3】shell编程的组合应用之二:管道及其命令

    预备知识: 管道:它是一个单向的,可以把前一个的数据输出导向到下一个命令的工具,这样可以实现多个命令组合处理一套数据. 它的符号是  "|"    管道只能处理经过前面一个命令传过 ...

随机推荐

  1. .NET简单企业应用

    <.NET简单企业应用>项目开发环境 项目开始,开发团队需要构建一套开发环境,主要包含:开发工具.代码管理/版本控制系统.任务和Bug管理系统和持续集成(CI)系统.本文主要列举项目开发中 ...

  2. 【SSRS】入门篇(三) -- 为报表定义数据集

    原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...

  3. EasyUI搭建前端框架

    EasyUI搭建前端框架 前言: 最近在忙公司的项目,也没太多时间来更新博客,谢谢大家的关注. 好啦,有了前面的系统整体简介和用户登录界面,我们开始使用EasyUI搭建前端页面框架! EasyUI官方 ...

  4. 正则表达式测试分析工具Expresso

    正则表达式测试分析工具Expresso 一个正则表达式的小工具--myRegexHelper   把以前做的一个功能抽取出来做成一个小的正则表达式测试工具.没什么特色,有两点功能: 一.方便的测试正则 ...

  5. Hadoop作业提交之TaskTracker获取Task

    [Hadoop代码笔记]Hadoop作业提交之TaskTracker获取Task 一.概要描述 在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobC ...

  6. 监控系统Opserver

    监控系统Opserver的配置调试   Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们 ...

  7. Day3:T1数论+高精 T2搜索

    T1:数论+高精(水~) 根据题意可知,从除的数越大越好(在0~9中) 所以我们只要用到高精除然后再模拟一下就可以了 //MARK:但是要注意0-9这个特殊值需要特判,因为题目要求输出的数至少是两位数 ...

  8. discuz的门户文章页中增加百度分享代码

    discuz虽然有百度分享插件,但是不太想用,于是自己手动添加了百度分享代码: 一.在http://share.baidu.com/地址中申请设置自己的百度分享代码,选择的风格完全按照个人喜好进行选择 ...

  9. TLS之上的HTTP

    1.介绍 HTTP[RFC2616]最初是在INTERNET上不用密码的应用.但随着HTTP的敏感性应用日益增加,对安全性的要求也随之增加.SSL及其后继TLS[RFC2246]提供了面向通道的安全性 ...

  10. JPA 批注参考

    body, p, th, td, li, ul, ol, h1, h2, h3, h4, h5, h6, pre { font-family: simsun; line-height: 1.4; } ...