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不等于[ var1ne 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值