• shell中let用法


    原文地址:http://www.cnblogs.com/yfanqiu/archive/2012/05/10/2494031.html

    shell程序中的操作默认都是字符串操作,在要运行数学运算符的时候可能得到意想不到的答案:

    1.  
      var=1
    2.  
      var=$var+1
    3.  
      echo $var
    4.  
       
    5.  
      output:
    6.  
      1+1

    从这个例子中可以看出shell字符串连接的操作,需要注意的是空格。

    在shell中可以使用let来指示下面是算术表达式,let表达式内变量不用加$

    1.  
      var=1
    2.  
      let "var+=1" 或 let var+=1 这种写法运算符间不能有空格
    3.  
      echo $var
    4.  
       
    5.  
      output:
    6.  
      2

    这其中的let可以用(())代替,let ″j=i*6+2″等价于((j=i*6+2)), 就像很多的循环中用法一样

    注意:let必须是完整的算术表达式,即有等号两边。(())、expr 可以只有等号右边的计算,由$((...))、$(expr ...)、`expr ...` 查看返回结果

    1.  
      var=1
    2.  
      ((var++)) 查看结果: echo $(())
    3.  
      echo $var
    4.  
       
    5.  
      output:
    6.  
      2

    还有一种写法:

    1.  
      var=1
    2.  
      var=$[$var+1]
    3.  
      echo $var
    4.  
       
    5.  
      output:
    6.  
      2

    使用expr,需要注意的是其中的那个符号并不是单引号,而是“1”左边的那个键

    注意:将需要运算的表达式写入在expr 后面,保证参数与运算符号中间有空格隔开。

    1.  
      var=1
    2.  
      var=`expr $var + 1` echo
    3.  
      echo $var
    4.  
      output:
    5.  
      2

    1:在shell 中$() 与 ``等效。执行中间包含的命令语句,返回执行结果。
    2:从效率来说let==(()) > expr > bc。let和(())运行是内建命令,使用相同的算法。
    3:let 和 expr 的运算是整数运算,不包括浮点预算。
    4:expr和bc是外部程序,expr的体积几乎等于bc的1/3,执行一次装入内存所消耗的时间就不一样。
    5:从运算能力来说,bc排第一位。

    1.  
      var=1
    2.  
      var=`echo "scale=1;$var*2.0"|bc` bc预设输出整数,用scale 指定小数点下位数 echo
    3.  
      echo $var
    4.  
      output:
    5.  
      2.0
    6.  
      var=1
    7.  
      var=`echo "$var 1"|awk '{printf("%g",$1+$2)}'` echo
    8.  
      echo $var
    9.  
      output:
    10.  
      2

    上面的这几种做法都是只能处理整数运算,下面的这种做法是可以处理浮点数的:

    上面的`符号跟上面的一样,是1左边的那个键,而bc是linux上面的一个计算器,支持除位运算以外的所有运行。

    另外一个支持浮点运算的方法是awk:

    $ c=$(awk 'BEGIN{print 7.01*5-4.01 }')

    $ echo $c

    没有借口
  • 相关阅读:
    LeetCode 275. H-Index II
    LeetCode 274. H-Index
    LeetCode Gray Code
    LeetCode 260. Single Number III
    LeetCode Word Pattern
    LeetCode Nim Game
    LeetCode 128. Longest Consecutive Sequence
    LeetCode 208. Implement Trie (Prefix Tree)
    LeetCode 130. Surrounded Regions
    LeetCode 200. Number of Islands
  • 原文地址:https://www.cnblogs.com/wutao1935/p/12623704.html
Copyright © 2020-2023  润新知