shell算数运算 let 和 expr

整数运算一般通过 let 和 expr 这两个指令来实现,如对变量 x 加 1 可以写作:let"x = $x + 1" 或者 x=`expr $x +1‘,个人感觉,二者差不多,前者表达比较简单,择优用之

 在bash中,let可以用来做数值运算
bash-2.05b$ export n=20
bash-2.05b$ n=n+1
bash-2.05b$ echo $n
n+1
n+1并没有按照数字处理,而是安装字符串串连处理
这时候如果想实现n按照数值进行相加,则就需要let出手了
bash-2.05b$ export n=20
bash-2.05b$ let n+=1
bash-2.05b$ echo $n

21

let 例子如下:

#!/bin/bash
n=20
#let n+=1
let n=n+1
echo "n = $n"
expr 例子如下:

#!/bin/bash
n=20
n=`expr $n + 1`
echo "n = $n"
这里空格很费解, let中运算符与操作数不能有空格, expr中 运算符与操作数必须有空格,真是麻烦。

在Bash Shell中,只能进行两个整数间的运算,其结果仍为整数.要进行算术
运算,需要使用let命令,语法为:
let expr
expr是一个包含项和操作符的表达式,项可以是一个变量或是一个整数常数,
当使用整数常数时,其默认为十进制整数,用户可以用radio#number来指定其它
形式的整数,其中radio定义了整数是几进制表示的,number是该整数的值.若
radio>10,那么数字字符可从0-9和A-Z.
在表达式中支持的操作符及其含义为:
+,-,*,/,% 加,减,乘,除,取模
>>,<<,&,^,|左移,右移,位与,位异或,位或
?: 三元运算符.与C语言中的定义一致
~ 取补码
!,>=,<=,>,<,==,!=,&&,||
=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
表达式式中也可以使用括号.括号或运算优先级的定义与一般计算机语言中的
相同.
let命令具有返回值.当计算结果(若有多个表达式时,以最后一个为准)为0时,
返回值为1,否则为0.
当表达式中含有shell的特殊字符(如|)时,需要用引用符('或")将其引用起来.
使用let时还需要注意的时,对于let x+y这样的式子,shell虽然计算了x+y的值
但却将结果丢弃,若不想这样,可以使用let sum=x+y将x+y的结果保存在变量sum中
另外还可以使用((和))操作符取代let命令,而且这样的话,还可以省去对算术
表达式的引用,如果想返回表达式的值,则需用$(())的格式.

if的条件中,“=”用于比较字符串;“-eq”用于比较整型数。


Bash shell 的算术运算有四种方式:
1:使用 expr 外部程式

加法 r=`expr 4 + 5`
echo $r
注意! '4' '+' '5' 这三者之间要有空白
r=`expr 4 * 5` #错误
乘法 r=`expr 4 \* 5`

2:使用 $(( ))
r=$(( 4 + 5 ))
echo $r

3:使用 $[ ]

r=$[ 4 + 5 ]
echo $r

乘法
r=`expr 4 \* 5`
r=$(( 4 * 5 ))
r=$[ 4 * 5 ]
echo $r

除法
r=`expr 40 / 5`
r=$(( 40 / 5 ))
r=$[ 40 / 5 ]
echo $r

减法
r=`expr 40 - 5`
r=$(( 40 - 5 ))
r=$[ 40 - 5 ]
echo $r

求余数
r=$[ 100 % 43 ]
echo $r

乘幂 (如 2 的 3 次方)
r=$(( 2 ** 3 ))
r=$[ 2 ** 3 ]
echo $r
注:expr 沒有乘幂

4:使用let 命令
加法:
n=10
let n=n+1
echo $n #n=11

乘法:
let m=n*10
echo $m

除法:
let r=m/10
echo $r


求余数:
let r=m%7
echo $r


乘冪:
let r=m**2
echo $r

虽然Bash shell 有四种算术运算方法,但并不是每一种都是跨平台的,建议使用expr。
另外,我们在 script 中经常有加1操作,以下四法皆可:
m=$[ m + 1]
m=`expr $m + 1`
m=$(($m + 1))
let m=m+1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值