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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM