签到成功

知道了

CNDBA社区CNDBA社区

Linux Shell之四 算术运算

2016-12-12 09:30 2232 0 转载 Linux
作者: Expect-乐

在Bash的算术运算中有以下几种方法:

名称                语法                    范例

算术扩展            $((算术式))              r=$((1+2*3))

使用外部程序expr    expr 算术式              r=`expr 1+2*3`

使用$[]             $[算术式]                r=$[1+2]

http://www.cndba.cn/Expect-le/article/1630

使用内置命令        declare -i 变量=算术式    declare -i r=1+2*3

使用内置命令let     let 算术式                let r=1+2


i++运算后加1,i--运算后减1http://www.cndba.cn/Expect-le/article/1630

++i运算前加1,--i运算前减1

一、算术扩展

算术扩展的语法是:$((表达式)),如果表达式中有变量,该变量之前最好不要加$这个符号,以免变量不存在造成语法错误,例:

unset ihttp://www.cndba.cn/Expect-le/article/1630

echo $((2+$i))

由于变量i不存在,所以会变成 echo $((2+)),这样语法就错误了。

但如果写成echo $((2+i)),((2+i))是一个合法的算术式,就算变量不存在,仍可正确计算。

a=5

a=$((++1)) a的值加1后,在赋值给a

a=$((--1)) a的值减1后,在赋值给a

a=$((3+a--))运算后减1

http://www.cndba.cn/Expect-le/article/1630

二、使用外部程序expr做算术运算

外部程序expr本来的作用,是在“标准输出”显示表达式的值。这个是外部程序,和Shell没有关系,所以移植性非常好,

如果注重跨平台,那么可以在脚本本使用expr代替其他算术表达式。

expr 3 + 4  

它会在屏幕上显示7,注意"+"两边有空格。

在使用expr时,要特别"表达式"中是否包含shell的特殊字符,如*、|、<、>、!、&、(、),要使用"/"来转义。

1、r=`expr 参数1 /|参数2`http://www.cndba.cn/Expect-le/article/1630

|代表"或"之意.如果”参数1“存在、非空、不是0,则传回”参数1“的值,否则传回"参数2"的值。 

r=`expr 3 /| 0` r的值为3

r=`expr 0 /| 2` r的值为2

2、r=`expr 参数1 /&参数2`

如果"参数1"和"参数2"都存在、非空、不是0,则传回"参数1"的值,否则传回0.

r=`expr 3 /& 0` r的值为0

3、比较

http://www.cndba.cn/Expect-le/article/1630

算术            是否成立    r的值
r=`expr 1 /< 2`      是        1 
r=`expr 3 /<= 2`     否        0 
r=`expr 2 /= 2`      是        1 
r=`expr 3 /!= 2`     是        1 
r=`expr 3 />= 2`     是        1 
r=`expr 3 /> 2`      是        1

4、加

r=`expr 4 + 5` r的值为9

5、减

r=`expr 3 - 5` r的值为-2

6、乘

http://www.cndba.cn/Expect-le/article/1630

r=`expr 3 /* 5` r的值为15

7、除

r=`expr 32 / 5` r的值为6(余数无条件舍去)

8、乘方

expr没有乘方的功能

9、求余数

r=`expr 32 % 5` r的值为2

10、计算字符串长度

r=`expr length "hello"`  r的值为5http://www.cndba.cn/Expect-le/article/1630

三、用$[]做算术运算

使用$[]做算术运算和$(())类似

加:r=$[4+5]    r的值为9

减:r=$[4-5]    r的值为-1

乘:r=$[4*5]    r的值为20

除:r=$[5/2]    r的值为2

余数:r=$[5%2]  r的值为1

乘方:r=$[2**3] r的值为8

四、使用declare、let做算术运算

declare为bash shell的内置命令。

declare -i Ihttp://www.cndba.cn/Expect-le/article/1630

I=5+4 

http://www.cndba.cn/Expect-le/article/1630

echo $I 

因为I事先被定义为整数(算术运算),所以$I的值为9,而不再是字符串5+4

当被定义为整数后,便可以进行加、减、乘、除..等操作

五、用let做算术运算

let为bash shell的内置命令。

let I=8+4*5

echo $I 

此时输出的值为28

let表明后边的直接说一个算术式。

也可使用空格符让表达式可读性高一点,但这时必须使用引号包括表达式才行。

let "i = i + 5"

本文出自 “生命不息,奋斗不止!” 博客,请务必保留此出处http://linuxnote.blog.51cto.com/9876511/1641189


用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Expect-乐

Expect-乐

关注

Without the continuous bitter cold, there can be no fragrant plum blossom

  • 336
    原创
  • 6
    翻译
  • 100
    转载
  • 41
    评论
  • 访问:1548054次
  • 积分:1957
  • 等级:核心会员
  • 排名:第4名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ