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 ...
随机推荐
- Treeview显示磁盘下的文件,并且可操作
#region TreeView树形显示磁盘下文件夹 /// <summary> /// IconIndexs类 对应ImageList中5张图片的序列 /// </summary& ...
- js面试题-2
// 1.截取字符串 var aa = "abcd"; console.log(aa.substr(,)); var str = "qweda"; consol ...
- 蓝桥网试题 java 基础练习 分解质因数
-------------------------------------------------------------------------- 递归更多的用在多分支情况中 本题用循环就可以了 用 ...
- 2017<java技术>预备作业计科冀浩然
1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系是相互融洽的,老师能够在上课的时候尽量多的教我们专业知识,可以尽量多和我们进行互动,课下能和我们如同朋友一般就可以了. 2.你 ...
- GDOI2015 解题报告
首先嘛现在发现题目这么水我还啥都没想出来正是呵呵了.接下来就口胡下GDOI的题解吧 PS:代码什么的要请联系我 题目:快戳我 Day1: T1:这个嘛,可以先找到起点所能到达的每个点然后判断该点能否到 ...
- 简单说说Markdown语法
# 简单说说 MarkDown 语法 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr ...
- iOS开发——设计模式那点事
单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类 ...
- Linux系统(五)负载均衡LVS集群之DR模式
序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...
- Synchronize执行过程
Synchronize执行过程及原理 在windows原生应用程序开发中,经常伴随多线程的使用,多线程开发很简单,难点就是在于线程的同步,在Delphi中提供了VC中不具备的一个过程Synchroni ...
- PHP学习笔记之PDO
1. 何为PDO? PDO(PHP数据对象) 是一个轻量级的.具有兼容接口的PHP数据连接拓展,是一个PHP官方的PECL库,随PHP 5.1发布,需要PHP 5的面向对象支持,因而在更早的版本上无法 ...