huayangshiboqi的博客

每天学习一点不一样

shell脚本【命令2】数值计算相关

可以把数值计算的相关命令分为三类:

1、是计算表达式的值:expr

2、整数算术运算:let  或  ((…))

3、修改变量的类型,然后直接运算

一:计算表达式的值

    命令:expr

    功能:expr命令可以做字符串比较操作和计算表达式的值。

    其中,expr命令的字符串比较操作基本被[[…]]结构代替。不过,expr的另一个功能,计算整数表达式的值,还是会经常用到的。

     expr命令支持的整数算术运算表达式格式:

    ① 求和

                expr exp1 + exp2

        注意:中间必须要有空格,下同↓↓↓

    ② 求差

                expr exp1 – exp2

    ③ 求积

                expr exp1 \* exp2

     注意求积表达式的区别,在“*”前要加转义符号“\”

    ④ 求商

                expr exp1 / exp2

    ⑤ 取余

                expr exp1 % exp2

 

    举例:

        function_testTwo( )               

        {

                echo `expr $1 + 8` >>test7    

                echo $1

                echo `expr $1 + 1` >>test7

        }

    注意:expr $1 + 8这是一句命令,如果想要引用这个命令的结果,则必须用命令替换来获取命令的输出。可以通过反引号或者$(…)来进行命令替换。

 

二:计算算术表达式

    命令:let   或  ((…)) 

      注意区分“((…))”与“[[…]]”,一个是计算整数表达式命令,一个是测试命令test的简写:点击打开链接

       支持的命令:

    ① 求和

        let var=exp1+exp2

        let “var=exp1+exp2”

        ((var = exp1 + exp2))

        分析:三种写法,结果完全一样。同时,第一种写法,整数算术表达式之间决不能有空格。剩下两种写法,在任何地方加不加空格没区别,包括等号两边,下同 ↓↓↓

    ② 求差

        let var=exp1-exp2

    ③ 求积

        let var=exp1*exp2

    ④ 求商

        let var=exp1/exp2

    ⑤ 取余

        let var=exp1%exp2

  除了上述五种算术运算之外,let和((…))结构还支持+=、-=、*=、/=、%=,就不一一罗列了,基本差不多写法。

 

三、两种的区别:

        expr命令相对于let或((…))命令来说的区别:

       expr命令是计算表达式的值,并返回表达式最终的计算结果

    虽然let和((…))命令也可以计算表达式的值,但是,并不会返回表达式的计算结果,而是返回的是一种出口状态。如果表达式的计算结果为0,则出口状态为1;表达式的计算结果非0,出口状态为0。

    总结来说就是:let和((…))命令的计算表达式功能一般没用,expr用来计算并返回表达式的最终结果。反过来同样适用,let和((…))命令主要用来计算等式,而expr命令并不能。所以,let和((…))命令与expr命令的分工还是挺明确的。


四、修改变量的类型,然后直接运算

    通过typeset或declare命令进行变量声明:

    如果把变量声明为了整数变量,则可以直接执行算术运算,而不需要使用expr或let命令。

    如果不通过typeset或declare命令对变量进行声明,则shell将会把赋予变量的值看做字符串。所以才有expr或let命令进行执行。

    使用typeset把变量声明成整型:-i

    ① 脚本举例test.sh:

            typeset -i number=3

            number=number/3

            echo $number

            number=6/3

            echo $number

    输出:3 2

     分析:输出的为,直接计算的结果

     如果没有对变量类型进行声明:

    ② 脚本举例test.sh:

            number=3

            number=number/3

            echo $number

    输出:number/3    

    分析:因为在number=number/3这一句,没有对number进行变量引用,而是作为了number/3字符串的一部分。

    ③ 脚本举例test.sh

            number=3

            number=$number/3

            echo $number

    输出:3/3

    ④ 脚本举例test.sh:

            number=6/3

            echo $number

    输出:6/3

     总结:

    在上述四个例子中,只有例1对变量进行了整型声明,也只有例1的表达式是直接计算得到了结果,剩下的三个例子,均没有计算,而是作为字符串进行处理。


    typeset命令也可以设置变量的权限,比如修改为只读

    typeset -r var

    这样可以保证那些重要的不会变的参数,能够不被误修改。一般用declare的较多,可以help declare进行查看。



阅读更多
个人分类: shell脚本
想对作者说点什么? 我来说一句

Linux JSON 常用解析命令总结

2017年12月29日 90KB 下载

数值计算引论第二版 答案

2011年05月05日 64KB 下载

第六章++数值计算命令与例题.ppt

2010年03月08日 432KB 下载

没有更多推荐了,返回首页

不良信息举报

shell脚本【命令2】数值计算相关

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭