[筆記]shell編程:數學計算

來源:互聯網
上載者:User

標籤:shell script   數學運算   bc   expr   (())   $[]   

在shell Script中,有好幾種進行數學運算的方法,雖然有幾個效果差不多,在編寫程式的時候使用一種方法就夠了,但是我們可能還需要學習別人的程式啊,在閱讀別人的程式的時候不能不認識這些東西吧。所以,留個筆記。


一.expr 命令  --  expr 允許在命令列上處理數學運算式,但是略顯拙劣。

例:$ expr 1 + 5    #注意在運算式中要有空格,如果寫成1+5那麼結果就不是我們想要的了。

expr命令能夠識別一些不同的數學和字串操作符:

操作符 描述
arg1 | arg2

如果沒有參數是NULL或者零,返回arg1;否則返回arg2

arg1 & arg2

如果沒有參數是null或者零,返回arg1 , 否則返回0

arg1 < arg2 如果arg1 小於 arg2 返回1 ,否則返回0;
arg1 <= arg2 arg1 小於或者等於 arg2 返回1 , 否則返回0
arg1 = arg2 arg1 等於arg2 返回1 ,否則返回0
arg1 != arg2

arg1 不等於arg2 返回1,否則返回0

arg1 >= arg2 

arg1 大於等於arg2 返回1,否則返回0

arg1 > arg2

arg1 大於arg2 返回1 , 否則返回0

arg1 + arg2 返回兩參數算數和
arg1 - arg2 返回算數差
arg1 * arg2 返回算術乘積
arg1 / arg2  返回算術商
arg1 % arg2 返回兩數相除的餘數
string : regexp 如果regexp匹配到了string中的某個模式,則返回該模式
match string :regexp 如果regexp匹配到了string中的某個模式,則返回該模式
substr STRING POS LENGTH 返回起始位置為POS 長度為LENGTH個字元的子串
index STRING CHARS 返回在STRING中找到的CHARS的位置,否則為0
length STRING 返回字串STRING的長度
+ TOKEN 將TOKEN解釋成字串,即使是一個關鍵字
(EXPRESSION) 返回EXPRESSION的值

注意:在使用expr命令時可能要使用‘\‘轉義或者‘‘轉義:expr 2 * 5   ==> expr: 語法錯誤 

                                                                                                              expr 2 \* 5  或者 expr 2 ‘*‘ 5 ==>10


.貨幣符號+方括弧 -- $[OPERATION]

例:var1=$[1+5] ;  ==> var1=6

        var2=$[$var1*3] ;  ==>  var2=18;

這個比前面的要方便多了...

缺點:只能進行整數運算,這是bash shell的原因,據說Z shell 支援浮點運算。我還沒有驗證過。

語句:var1=$[100/30]  ==>  var1=3 ,如果要進行浮點運算可以使用bc計算機。該用法將在後面講到。


三. 貨幣符號+雙括弧  -- $((OPERATION))

與$[]使用方法相同.

例如:var=$((1+3)) ==> var=4


.雙括弧 --(( expression ))雙圓括弧允許將進階數學運算式放入比較,也支援數學計算。

這裡的expression可以是任意的數學賦值或者比較運算式,能夠是比較運算式,也就是說可以當作test命令使用,在if while for until 結構中都可以用作條件判別語句。

val++ (後)自增
val--

(後)自減

++val (前)自增
--val (前)自減
邏輯求反
~ 位求反
** 冪運算
<< 左移位
>> 右移位
& 位與
| 位或
&& 邏輯與
|| 邏輯或

例:var1=10; ((var2=$var1**3)) ; ==>該句的意思是 var2=10*10*10=1000,(10的立方)

        if (($var1**2>90)) ; then echo "ok" ; fi   ==>當var1的平方大於90時輸出 ok。

這個東西很強大,而且在指令碼中使用很直觀,當見到(())時,我們就知道,這裡出現了數值計算。


五.  let 命令 --與(())類似;

            $let "$var+=1" 或者 $let "var=$var+1";


六.  bc計算機(大boss)解決浮點運算的常用方案。

(一)在命令列使用bc

        bc 是我們學習linux時最先學習的幾個命令。直接在命令列輸入bc可以進入bc計算機的互動介面,可以在裡面定義變數,計算運算式等操作。

例如:$bc

                2+5

                7

        bc計算機的浮點運算由一個叫做scale的變數控制,實際上,scale的值就是小數點後的位元,而bc預設的scale=0,所以在計算的時候需要修改scale,比如scale=4,保留小數點後四位。

例如:$bc

                3.44/5

                0

                scale=4

                3.44/5

                .6880

        使用-q參數可以將進入bc後輸出的著作權說明給屏蔽掉。使用quit退出bc

例如:$bc

                quit

(二)在指令碼中使用bc

bc可以接受標準輸入,而這個標準輸入我們可以通過管道或者重新導向來提供給它。

bc接受標準輸入後,計算輸入的運算式,輸出到標準輸出中,我們可以通過$(commamd)或者是`command`來擷取它的輸出。

常見用法一:

        variable=$( echo "options; expression " | bc) ;

        例如:

                    var=$(echo "scale=4; 3.44/5 ;" | bc) ;  ==> var=.6880

常見用法二:使用內聯(inline)輸入重新導向 <<

         variable=$(bc << EOF

          options;

          statements;

          expressions;

          EOF)        

例如:

                    var=$(bc << EOF

                    scale=4;

                    var1=20;

                    var2=3.1415926;

                    a1=($var1 * $var2);

                    b1 = ($var1 / $var2);

                    a1 + b1;

                    EOF)

用法還有很多中,比如檔案重新導向什麼的,原理都是一樣的。

暫時想到這麼多,歡迎補充!

本文出自 “Mr_Cinus” 部落格,請務必保留此出處http://cinus.blog.51cto.com/9624650/1581695

[筆記]shell編程:數學計算

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.