算术运算

尽管Shell中的变量被缺省地看做是string类型,而非number,但是Shell本身仍然支持算术运算。
主要有以下5种方式。

1. declare

$ n=6/3
$ echo $n
6/3
$ declare -i n #将n声明为一个整数(integer)
$ n=6/3
$ echo $n
2

2. expr

$ z=5
$ z=`expr $z+1` # 加号(+)两边要有空格
$ echo $z
5+1
$ z=`expr $z + 1`
$ echo $z
6

3. let

$ let z=5
$ echo $z
5
$ let z=$z+1
$ echo $z
6
$ let z=$z + 1 # 与expr相反, 在加号(+)两边加空格会导致let报错!
-bash: let: +: syntax error: operand expected (error token is "+") $let z=z+1 # 在读取变量值的时候,可以省略美元符号($)
$echo $z
7

4. Bash内置运算( 双括号(()) )

$ ((e=5))
$ echo $e
5
$ (( e = e + 3 ))
$ echo $e
8
$ (( e=e+4 )) # 加号(+)两边的空格可加可不加
$ echo $e
12

支持的算术运算有:

符号 含义
+ – 加减
++ — 自增 自减
* / % 乘 除 取模
**

除了支持算术运算外,还支持逻辑运算:

if (( x > y )); then
echo "x > y"
fi

支持的逻辑运算有:

符号 含义
<= >= < > 小于等于 大于等于 小于 大于
== != 相等 不等
! 否定
&&
||

5. bc

bc支持浮点运算,这在let(())中是不支持的。

$let r=3.5
-bash: let: r=3.5: syntax error in expression (error token is ".5")
$(( r = 3.5 ))
-bash: ((: r = 3.5 : syntax error in expression (error token is ".5 ")

bc的用法如下:

$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3 + 2
5
obase=2
12
1100
<cntrl-d>

注意,使用ctrl + d(EOF)可以退出bc

$r=3.5
$s=`echo "$r + 2.2" | bc`
$echo $s
5.7 $ z=`echo "$z + 1" | bc`
$ echo $z
8
$ z=`echo "$z+1" | bc` # 加号(+)两边的空格可加可不加
$ echo $z
9

数字类型的布尔表达式

有一下3种方式比较数字类型变量的大小。

1. test(即[])

符号 含义 举例
-eq 相等 [ ‘1’ -eq 1 ]
-gt 大于 [ 2 -gt 1 ]
-ge 大于等于 [ 2 -ge 1 ]
-lt 小于 [ 2 -gt 3 ]
-le 小于等于 [ 2 -le ‘3’]
-ne 不等于 [ $var1 -ne $var2 ]

2. 双括号(即 (()) )

以下2个表达式是等价的。

if (( x < y )); then
statements
fi if [ $x -lt $y ]; then
statements
fi

3. bc

bc可以用于比较浮点数的大小:当比较结果为真(true)时,返回1;否则返回0。举个例子:

if [ $( echo "$t < 3.4" | bc ) -eq 1 ]; then
statements
fi

原文: Math in Shell Scripts

Shell中的算术运算(译)的更多相关文章

  1. shell脚本之算术运算和逻辑运算

    目录 算术运算 赋值运算 逻辑运算 短路运算和异或 条件测试 数值测试 字符串测试 文件及其属性测试 存在性测试 存在性及类别测试 文件权限测试 文件特殊权限测试 文件大小测试 文件是否打开 双目测试 ...

  2. shell 中的特殊符号的含义

    来源:http://blog.sina.com.cn/s/blog_62a151be0100x9rn.html 第四章 基本功 - 特殊符号 学习撰写 script 最迅速的捷径是观摩别人的 scri ...

  3. shell中的重定向(输入输出)

    注意:不同版本的Linux会有所区别,不过大同小异 Linux 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设 ...

  4. shell中的(),{}几种语法用法

    转自:https://www.cnblogs.com/HKUI/p/6423918.html 查看脚本语法是否有错误:bash -n modify_suffix.sh跟踪执行sh -x modify_ ...

  5. shell 中的()【】{}(())

    本文转自:https://blog.csdn.net/taiyang1987912/article/details/39551385 shell中各种括号的作用().(()).[].[[]].{} 一 ...

  6. 转一篇shell中关于各种括号的讲解

    shell中各种括号的作用().(()).[].[[]].{} 一.小括号,圆括号()1.单小括号 ()   ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的 ...

  7. (转)shell中各种括号的作用()、(())、[]、[[]]、{}

    shell中各种括号的作用().(()).[].[[]].{} 原文:http://www.jb51.net/article/60326.htm http://blog.csdn.net/good_h ...

  8. Shell编程——Shell中的数学运算

    在Linux Shell中进行数学运算,通常能够使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1.let命令 let命令是bash内置命令.能够实现简单的算术以及逻 ...

  9. shell中if条件字符串、数字比对,[[ ]]和[ ]区别

    目录 shell 括号 test 和 []符号 [[]] 符号 let和(())符号 "[]" , "[[]]" 和 "(())"对比 sh ...

随机推荐

  1. Bloom Filter的基本原理和变种

    学习一个东西首先要知道这个东西是什么,可以做什么,接着再了解这个东西有什么好处和优势,然后再学习他的工作原理.下面我们分别从这三点简单介绍一下bloom filter,以及和他的变种. What:在允 ...

  2. Jquery右击显示菜单事件,运用smartMenu插件。

    基本格式: 1.引用jquery.smartMenu插件.css样式: <script src="gongju/jquery-1.11.2.min.js" type=&quo ...

  3. js_DOM操作

    嗯,大过年的上次更新应该还是在,大年30前一天,说好的一天更一篇,感觉食言了,虽然没有更,但是,每天还是坚持在学习的,所以今天的任务就是把这几天学的都发上来. 博客,我觉得不仅仅是交流知识的地方,我宁 ...

  4. iOS网络层设计感想

    App的开发无外乎从网络端获取数据显示在屏幕上,数据做些缓存或者持久化,所以网络层极为重要.原来只是把AFNetwork二次封装了一下,使得调用变得很简单,并没有深层次的考虑一些问题. 前言 参考: ...

  5. ArcGIS制图技巧系列(1)还原真实的植被

    ArcGIS制图技巧系列(1)还原真实的植被 by 李远祥 在GIS数据中,植被一般都是面装要素的形式存在.很多人在使用植被渲染的时候,一般会采用填充符号去渲染.而在ArcGIS中,填充符号要么就是纯 ...

  6. 不要在Android的Application对象中缓存数据!

    前言   在你的App中的很多地方都需要使用到数据信息,它可能是一个session token,一次费时计算的结果等等,通常为了避免Activity之间传递数据的开销,会将这些数据通过持久化来存储. ...

  7. CSS3知识点整理(二)----CSS3选择器

    总结各种CSS3选择器的介绍及具体语法 (一)属性选择器 在CSS2中引入了一些属性选择器,而CSS3在CSS2的基础上对属性选择器进行了扩展,新增了3个属性选择器,使得属性选择器有了通配符的概念,这 ...

  8. java 多线程之卖票两种方式

    1.通过extends Thread /* 需求:简单的卖票,多个窗口同时买票 (共用资源) 创建线程的第二种方式:实现Runnable接口 步骤: 1,定义类实现Runnable接口 2,覆盖/重写 ...

  9. 8086cpu

    1.  8086CPU和8088CPU内部结构基本相同,不同之处在于8088有8条外部数据总线,因此为准16位.8086有16条外部数据总线.两个CPU的软件完全兼容,程序的编制也完全相同. 2.   ...

  10. 1305 Pairwise Sum and Divide

    1305 Pairwise Sum and Divide 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 有这样一段程序,fun会对 ...