• (转)Linux基础------Shell数值计算的几种方法


    Linux基础------Shell数值计算的几种方法

    原文:http://blog.csdn.net/fu_wayne/article/details/21620639

    在Linux下总会遇到数值计算问题,由于Linux下变量都属于弱变量,没有变量类型的概念(貌似脚本语言都是这样)。

    例如定义一个变量:x=1

    此时的变量x默认是一个字符串,即使看着像一个数字,所以当尝试用如下的方法去进行计算的时候,得到的结果却不是想要的

    echo $x+=1         ------------> 输出:2+=1,并不是想要的结果2

    Linux下有多种方法进行计算,一下摘录几例:

    1.使用$[]

      个人最常用的就是$[]方法进行计算,简单方便,适合不太复杂的计算。

      

    [plain] view plain copy
     
    1. x=1  
    2. echo $[$x+=1]  

    输出:2

    2.使用expr

    expr命令为Linux中的命令,一般用于整数值计算,但也可用于字符串操作。
    使用格式:
    expr var1 operator var2
     
    例如:
    [plain] view plain copy
     
    1. x=1  
    2. expr $x + 4   
    输出:5
     
    注意:表达式之间的空格,注意只能进行整数运算,如果操作数不为整数,命令将会报错。
    此命令所有计算的结果会以整数形式返回,例如上述的表达式变为:expr $x / 4 ,其结果为1,结果已经自动进行了取整操作。
     

     
    3.使用(())
     
    使用方法:((表达式1,表达式2,表达式3))
     
    相比上面的两种方法,(())这种方法略显强大,它的强大之处在于:
    1) 支持a++,a--操作(是不是找到C语言的感觉)
    2) 支持多个表达式运算,各个表达式之间用“,”分开
    3) 双括号可以进行逻辑运算,四则运算
    4) 双括号结构 扩展了for,while,if条件测试运算
    5) 在双括号结构中,所有变量可以不加入:“$”符号前缀
     
    [plain] view plain copy
     
    1. x=1  
    2. ((y = x + 1,z = y + 1))  
    3. echo $z  
    输出:3
     
    如果双括号带:$,将获得表达式值,赋值给左边变量
    [plain] view plain copy
     
    1. a=10  
    2. b=10  
    3. total=$((a*b))  
    [plain] view plain copy
     
    1. echo $total  
    输出:100
     
    扩展流程控制语句(逻辑关系式)(摘自网络)
    [plain] view plain copy
     
    1. #!/bin/sh   
    2. num=100;   
    3. total=0;   
    4. for((i=0;i<=num;i++));   
    5. do   
    6. ((total+=i));   
    7. done   
    8. echo $total;   
    9. total=0;   
    10. i=0;   
    11. while((i<=num));   
    12. do   
    13. ((total+=i,i++));   
    14. done   
    15. echo $total;   
    16. if((total>=5050));then   
    17. echo "ok";   
    18. fi   

    4.使用 let 命令
    [plain] view plain copy
     
    1. var=1  
    2. let "var+=1" 或 let var+=1 这种写法运算符间不能有空格   
    3. echo $var  
    4.   
    5. output:  
    6. 2  


    使用方法:
    let 表达式
    注意:let必须是完整的算术表达式,即有等号两边
  • 相关阅读:
    vector常规用法(leedcode)
    creaor小游戏数据表配置引发的相关问题
    cocos2dx conversion to dalvik format failed
    Java中如何实现列表对象(List)的灵活查找?/java中Listgen根据某个元素获取对象
    MySql忘记root用户密码
    命令行模式下备份和恢复mysql数据库
    mysql开启日志
    Python操作Excel文件
    Python操作Json文件
    Python操作xml文件
  • 原文地址:https://www.cnblogs.com/liujiacai/p/7828595.html
Copyright © 2020-2023  润新知