zoukankan      html  css  js  c++  java
  • shell 里面的计算

    ---恢复内容开始---

    关于shell里面的计算其实早在接触LINUX的时候就已经接触到了。每次在运用的时候却是在网上到处找,所以觉得花点时间好好研究下。  

      首先了解下常用的算数运算符号:

    +  -

    加法(正号),减法(负号)

    *  /  %

    乘法,除法,取余

    **

    幂运算

    ++ --

    增加或者减少,可前置也可放在变量结尾

    ! && ||

    逻辑非(取反)。逻辑与(and,逻辑或(or)

    < <= > >=

    小于,小于等于 大于 大于等于

    == !=  =

    比较符号(相等。不相等。 对于字符串=也是等于号)

    << >>

    向左移位,向右移位

    ~ | & ^

    安位取反 按位异或 按位与  按位或

    = += -= *= /= %=

    赋值运算符例如 a+=1 就是a=a+1

      常用的算数运算命令如下

    运算操作与运算命令

    意义

    (())

    用于证书运算的常用运算符,效率很高

     let

    用于证书运算,类似于‘(())’

    expr

    可用于整数运算,但还有很多其他额外的功能

    bc

    Linux下的一个运算程序(数和证书和小数运算)

    $[]

    用于整数运算

    awk

    awk既可以用于证书运算,也可以用于小数运算

    declare

    定义变量和属性,-i参数可以用于定义整形变量,做运算/

     一:双小括号的运算实践

      1.1

        利用(())进行简单的计算((i=i+1))表示把i+1的结果赋给i,但是如果要引用结果的话,不知能echo ((i=1+1))必须要加上$符号 echo $((i=1+1))

        

         

      1.2 利用(())双括号进行比较以及判断

        这里的 1 表示真,0表示假可以和逻辑运算一起。

    注意:上面涉及的数字以及变量必须为整数(整形),不能是小数或者字符串

      1.3 --,++的用法

        举个最简单的例子:

      ++a表示输出计算后的数,a++表示输出的是a的值

    1.4 (())的赋值运算

      这里需要注意的是 (())里面引用变量可以不加$ (当然也可以加,我习惯加)

       (())里面所有字符之间没有空格,有一个或者多个不会影响结果。let命令和(())功能相同但是效率较低这里就不说了

    二 expr命令的用法

      expr既可以用于整数计算,也可以用于字符串的长度,匹配的运算处理。

      2.1用于计算

        

      2.2 用于字符串,expr判断字符串是否是整数。由于函数库比较少,所以判断字符串是否为整数是一个比较难的事情。实现原理,比一个字符串和1相加,查看返回值,如果返回值是0,那么这个数就是整数

                注意,使用expr  后面计算符号前后必须有空格!!

        也可以使用match来匹配如下:

        expr的特殊用法,判断文件名是否满足要求!

                计算字符串的长度

    AWK 实现计算!

      用awk实现计算的一个非常好的方法,特别是小数

      

       我们上面的都是直接用$i 来引用,也可以用declare(同typeset)来定义 然后直接使用

    这样用的比较少

    $[]符号的运算

      

    以上就是我们常用的运算!!下面有几个实例

         写一个脚本,完成输入两个数,判断这两个数是否为整数,如果是整数,完成相加并且输出结果,如果不是则给出相应的提示

         

     #!/bin/bash
    
           read -t 15 -p "please input two num:"  a  b
    
           [ ${#a} -le 0 ]  && { echo "the first num is null exit 1"}
    
           [ ${#b} -le 0 ]  && { echo "the secound num is null exit 1"}
    
            expr $a + 1 &> /dev/null
    
          RETVAL_A=$?
    
            expr $b + 1 &> /dev/null
    
           RETVAL_B=$?
    
     if [ $RETVAL_A -ne 0 -o $RETVAL_B -ne 0   ] ;then
    
      echo "one of the num is not num ,pls input again"
    
      exit 1
    
    fi

     

    ---恢复内容结束---

  • 相关阅读:
    C++之容器
    C++之复制控制
    TCP的3次握手/4次握手
    linux编程之多线程编程
    linux编程之信号
    linux编程之共享内存
    MySQL数据库优化
    MySQL存储引擎InnoDB与Myisam
    Redis--持久化
    Redis 请求应答模式和往返延时 Pipelining
  • 原文地址:https://www.cnblogs.com/ZFBG/p/9098376.html
Copyright © 2011-2022 走看看