shell命令進行算術/數值運算的方法總結

來源:互聯網
上載者:User


shell中的變數都是以字串的形式儲存的,即使你賦值的時候給的是整形值,除非你通過declare -i來聲明變數。

在進行數值/算術運算的時候,你可能會發現下面的情況

$ x=121
$ echo $x+1
121+1
定義變數x,並賦值一個整形的變數,可是echo $x+1的結果卻不是我們想要的122,而是121+1。這是因為$x+1並沒有被當做算術運算,而是簡單的字串的運算導致。

那如何在shell中進行數值/算術運算呢?(以下使用的shell為bash shell)

方法一:let命令

$ let "x=x+1"
$ echo $x
122

方法二:$[ ]

$ echo $[x-1]
121
$ echo $x
122

方法三:$(( ))

$ echo $((x-1))
121
$ echo $x
122

方法四:declare -i

$ declare -i x
$ echo $x+1
122+1
$ x=$x+1
$ echo $x
123

通過declare聲明變數x之後,需要重新給x賦值後,x才能得到算術運算的結果。

5.加雙括弧的

count=0

((count++))

6.使用expr命令

count=0
count=`expr $count + 1`

7.使用bc命令

count=0

count= `echo "$count + 1"|bc`

介紹:

bc是linux下的一個簡單計算機,支援浮點數計算,在命令列下輸入bc即進入計算機程式,而我們想在程式中直接進行浮點數計算時,利用一個簡單的管道即可解決問題。

 注意:

   1)經測試bc支援除位操作運算子之外的所有運算子。
   2)bc中要使用scale進行精度設定
   3)浮點數計算執行個體
 
count=3.11
count=`echo "scale=2;$count*3"|bc`
echo $count
輸出結果為9.33

8.使用awk計算

echo $var 1| awk '{printf("%d\n", $1+$2)}'


補充:

((i=$j+$k))    等價於 i=`expr $j + $k`
((i=$j-$k))     等價於   i=`expr $j -$k`
((i=$j*$k))     等價於   i=`expr $j \*$k`
((i=$j/$k))     等價於   i=`expr $j /$k`


Let expressions 執行一個或多個運算式。運算式中的變數前不必有$.如果運算式中包含了空格或其他特殊字元,則必須引起來。

例:let “I = I + 1” 或 let i=i+1

 

算術運算子指的是可以在程式中實現加、減、乘、除等數學運算的運算子。Shell中常用的數學運算子如下所示。

— +:對兩個變數做加法。

— -:對兩個變數做減法。

— *:對兩個變數做乘法。

— /:對兩個變數做除法。

— **:對兩個變數做冪運算。

— %:模數運算,第一個變數除以第二個變數求餘數。

— +=:加等於,在自身基礎上加第二個變數。

— -=:減等於,在第一個變數的基礎上減去第二個變數。

— *=:乘等於,在第一個變數的基礎上乘以第二個變數。

— /=:除等於,在第一個變數的基礎上除以第二個變數。

— %=:模數賦值,第一個變數對第二個變數模數運算,再賦值給第一個變數。

在使用這些運算子時,需要注意到運算順序的問題。例如輸入下面的命令,輸出1+2的結果。

echo 1+2

Shell並沒有輸出結果3,而是輸出了1+2。在shell中有三種方法可以更改運算順序。

— 用expr改變運算順序。可以用echo `expr 1 +2`來輸出1+2的結果,用expr表示後面的運算式為一個數學運算。需要注意的是,`並不是一個單引號,而是“Tab”鍵上面的那個符號。

— 用let指示數學運算。可以先將運算的結果賦值給變數b,運算命令是b=let 1 + 2。然後用echo$b來輸出b的值。如果沒有let,則會輸出1+2。

— 用$[]表示數學運算。將一個數學運算寫到$[]符號的中括弧中,中括弧中的內容將先進行數學運算。例如命令echo$[1+2],將輸出結果3。

下面是一個shell程式執行個體,實現數學函數S=3(xy)+4x2+5y+6的運算。在程式中以位置變數的方式輸入x與y的值。程式的編寫步驟如下所示。

 在主菜單中開啟一個終端。在終端中輸入“vim”命令開啟VIM。

 在VIM中按“i”鍵進入插入模式,然後輸入下面的代碼。

代碼4-2  數學運算執行個體:\源檔案\04\4.4.sh

#!/bin/bash

#4.4.sh

s=0                                    #定義一個求和變數,初值為0。

t=`expr$1**$2`                        #用expr改變運算順序,求x的y次方。

t=$[t*3]                               #t乘以3。

s=$[s+t]                               #結果相加。

t=$[$1**2]                             #求x的平方。

t=$[t*4]                               #結果乘以4。

s=$[s+t]                               #結果相加。

t=`expr$2*5`                          #求5y的值。

s=$[s+t]                               #結果相加。

s=$[s+6]                               #結果加上6。

echo$s                                #輸出結果。

echo$((a%b))                          #取餘

 在這個程式中,需要注意算術運算的寫法。如果沒有expr或$[]更改運算順序,則會將運算式以字串的形式賦值,而不會賦值運算結果。

 按“Esc”鍵返回到普通模式。然後輸入“:w 4.4.sh”儲存檔案。

 輸入“:q”命令,按“Enter”鍵退出VIM。

 在終端中,輸入下面的命令對4.4.sh檔案添加可執行許可權。

chmod +x 4.4.sh

 輸入下面的命令運行程式。在命令中需要輸入兩個參數。

./4.4.sh 2 4

 程式會完成S=3(xy)+4x2+5y+6的數學運算並輸出結果,結果如下所示。

90

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.