您的位置:首页 > 运维架构 > Shell

Shell中的算术运算(译)

2017-03-17 15:16 295 查看

算术运算

尽管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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: