算术运算

尽管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. CodeForces757A

    A. Gotta Catch Em' All! time limit per test 1 second memory limit per test 256 megabytes input stand ...

  2. [转载] ping和telnet的区别

    转载自:http://www.cnblogs.com/Jtianlin/p/4045021.html windown7下打开telnet功能: 控制面板 --- > 程序(小图标下直接到[程序和 ...

  3. 第七届蓝桥杯javaB组真题解析-煤球数目(第一题)

    题目 /* 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有 ...

  4. java文件读写操作类

    借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...

  5. 【 js 算法类】数组去重

    以 var arr = [1,2,3,1]; 作为测试用例 方法一:双循环   (时间复杂度比较高,性能一般.) A.(1) function unique(arr) { var newArr = [ ...

  6. 新注册第一帖----------------------乱码新手自学.net 之Linq 入门篇

    作为一个业余开发,断断续续学.net/c#也有不少日子了, 学习过程中,不断忘了学,学了忘,这让我很苦恼. 以前学习过程中,我总是在笔记本中记录下来知识要点,这么久下来,笔记本都写了四五本了. 然而, ...

  7. 第四章:JQuery选择器

    一.使用选择器的目的 从页面上的万万千千个元素中选择自己需要的. 二.选择器的分类 1.基本选择器 *:标签 *:类 *:ID 交集  AB   AB共同的部分    并集  A,B  AB使用相同的 ...

  8. [NOI2007]货币兑换Cash(DP+动态凸包)

    第一次打动态凸包维护dp,感觉学到了超级多的东西. 首先,set是如此的好用!!!可以通过控制一个flag来实现两种查询,维护凸包和查找斜率k 不过就是重载运算符和一些细节方面有些恶心,90行解决 后 ...

  9. CentOS 7 yum搭建 LAMP

    CentOS 7 搭建LAMP环境 1. Apache 安装 Apache 的软件包名称叫做httpd,因此安装Apache,使用以下命令 [root@localhost ~]# yum -y ins ...

  10. R系列:关联分析;某电商平台的数据;做捆绑销售和商品关联推荐

    附注:不要问我为什么写这么快,是16年写的. 一.分析目的 I用户在某电商平台买了A,那么平台接下来应该给用户推荐什么,即用户在买了商品A之后接下来买什么的倾向性最大: II应该把哪些商品在一起做捆绑 ...