Shell中的算术运算(译)
算术运算
尽管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
Shell中的算术运算(译)的更多相关文章
- shell脚本之算术运算和逻辑运算
目录 算术运算 赋值运算 逻辑运算 短路运算和异或 条件测试 数值测试 字符串测试 文件及其属性测试 存在性测试 存在性及类别测试 文件权限测试 文件特殊权限测试 文件大小测试 文件是否打开 双目测试 ...
- shell 中的特殊符号的含义
来源:http://blog.sina.com.cn/s/blog_62a151be0100x9rn.html 第四章 基本功 - 特殊符号 学习撰写 script 最迅速的捷径是观摩别人的 scri ...
- shell中的重定向(输入输出)
注意:不同版本的Linux会有所区别,不过大同小异 Linux 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设 ...
- shell中的(),{}几种语法用法
转自:https://www.cnblogs.com/HKUI/p/6423918.html 查看脚本语法是否有错误:bash -n modify_suffix.sh跟踪执行sh -x modify_ ...
- shell 中的()【】{}(())
本文转自:https://blog.csdn.net/taiyang1987912/article/details/39551385 shell中各种括号的作用().(()).[].[[]].{} 一 ...
- 转一篇shell中关于各种括号的讲解
shell中各种括号的作用().(()).[].[[]].{} 一.小括号,圆括号()1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的 ...
- (转)shell中各种括号的作用()、(())、[]、[[]]、{}
shell中各种括号的作用().(()).[].[[]].{} 原文:http://www.jb51.net/article/60326.htm http://blog.csdn.net/good_h ...
- Shell编程——Shell中的数学运算
在Linux Shell中进行数学运算,通常能够使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1.let命令 let命令是bash内置命令.能够实现简单的算术以及逻 ...
- shell中if条件字符串、数字比对,[[ ]]和[ ]区别
目录 shell 括号 test 和 []符号 [[]] 符号 let和(())符号 "[]" , "[[]]" 和 "(())"对比 sh ...
随机推荐
- Bloom Filter的基本原理和变种
学习一个东西首先要知道这个东西是什么,可以做什么,接着再了解这个东西有什么好处和优势,然后再学习他的工作原理.下面我们分别从这三点简单介绍一下bloom filter,以及和他的变种. What:在允 ...
- Jquery右击显示菜单事件,运用smartMenu插件。
基本格式: 1.引用jquery.smartMenu插件.css样式: <script src="gongju/jquery-1.11.2.min.js" type=&quo ...
- js_DOM操作
嗯,大过年的上次更新应该还是在,大年30前一天,说好的一天更一篇,感觉食言了,虽然没有更,但是,每天还是坚持在学习的,所以今天的任务就是把这几天学的都发上来. 博客,我觉得不仅仅是交流知识的地方,我宁 ...
- iOS网络层设计感想
App的开发无外乎从网络端获取数据显示在屏幕上,数据做些缓存或者持久化,所以网络层极为重要.原来只是把AFNetwork二次封装了一下,使得调用变得很简单,并没有深层次的考虑一些问题. 前言 参考: ...
- ArcGIS制图技巧系列(1)还原真实的植被
ArcGIS制图技巧系列(1)还原真实的植被 by 李远祥 在GIS数据中,植被一般都是面装要素的形式存在.很多人在使用植被渲染的时候,一般会采用填充符号去渲染.而在ArcGIS中,填充符号要么就是纯 ...
- 不要在Android的Application对象中缓存数据!
前言 在你的App中的很多地方都需要使用到数据信息,它可能是一个session token,一次费时计算的结果等等,通常为了避免Activity之间传递数据的开销,会将这些数据通过持久化来存储. ...
- CSS3知识点整理(二)----CSS3选择器
总结各种CSS3选择器的介绍及具体语法 (一)属性选择器 在CSS2中引入了一些属性选择器,而CSS3在CSS2的基础上对属性选择器进行了扩展,新增了3个属性选择器,使得属性选择器有了通配符的概念,这 ...
- java 多线程之卖票两种方式
1.通过extends Thread /* 需求:简单的卖票,多个窗口同时买票 (共用资源) 创建线程的第二种方式:实现Runnable接口 步骤: 1,定义类实现Runnable接口 2,覆盖/重写 ...
- 8086cpu
1. 8086CPU和8088CPU内部结构基本相同,不同之处在于8088有8条外部数据总线,因此为准16位.8086有16条外部数据总线.两个CPU的软件完全兼容,程序的编制也完全相同. 2. ...
- 1305 Pairwise Sum and Divide
1305 Pairwise Sum and Divide 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 有这样一段程序,fun会对 ...