shell指令碼中的算術運算

2021-06-23 06:55:24 字數 2025 閱讀 4597

**:

本文將介紹6種shell指令碼中算術運算的方法,各有優缺點,當然了,最常用的就那兩種,我會特別指出。

6種算術運算方法是:

let operation

expr operation

$[ operation ]

$(( operation ))

用awk 做算術運算

echo "operation" | bc

let no1

++let no1

--let

no+=

6let no=

no-6

let 使用方法比較簡單,尤其是用來做自增自減運算,看起來更直觀,引用變數的時候也不用在變數名前加"$"符號。

result

=`expr 3 + 4`

result=$

(expr $no +5

)

我最不喜歡這種方式了,怎麼看怎麼彆扭,每次都要寫expr 這 幾個字元,而且都要用反引號引起來,怎麼會有這種方式呢?這一定是歷史遺留問題!

這是比較常見的一種方式了,而且用起來也比較方便,在引用變數的時候,可以在變數名前面加"$"符號,也可以不加。

result=$

[no1

+no2

]result=$

[$no1 +5

]

個人覺得這是比較正常也比較方便的方式,不過,它也不是沒有缺點,dash 就不支援它,好在現在大部分linux 發行版都有bash,所以,在寫指令碼的時候,最好在前面加上'#!/bin/bash' ,你也可能加的是'#!/bin/sh' ,這種方式也可能呼叫的是dash,因為有可能/bin/sh 只是/bin/dash 的乙個符號鏈結(見參考書1)。

這也是一種很常見的方式,除了比上一種方式要多敲兩次鍵盤,其他用法都一樣,就我個人而言,還是更喜歡上面那種方法,怎麼看怎麼正常,因為shell 裡面if 語句的判斷式是 [ command or expression ] ,用上面那種方式進行算術運算,可能看起來更一致。

上面就是4種shell 指令碼進行算術運算的方法,它們都不支援浮點數。所以,聰明的我們可以用其他方法來進行算數運算,這其中,awk 就是乙個很好的方法。

awk類似於c語言,而且提供了多種函式,需要浮點數運算或更高階數學函式的時候,用awk 才是聰明之舉。

echo -e 

"$i\t$j"

|awk

''

awk 已經可以幫助我們完成很多運算了,不過你可能更喜歡用bc 來計算,畢竟,人家bc 才是專業的,而且看起來比awk 更直觀,最重要的,有些事情用awk 無法解決,比如,你要計算兩個10進製的數,然後以2進製的方式輸出結果。

echo 

"obase=2;$i+$j"

|bc

bc 還有乙個非常非常好的好處,如下所示:

variable

=`bc << eof

options

statements

expressions

eof`

具體例項:

#!/bin/bash

var1

=10.46

var2

=43.67

var3

=33.2

var4=71

var5

=`bc << eof

scale=4

a1=($var1 * $var2)

b1=($var3 * $var4)

a1+b1

eof`

echo

thefinal

answer

forthis

mess

is$var5

應該,或許,可能還有其他方法,不過,這些都是linux系統自帶的工具和方法,所以,相容各種平台,而且,這幾種運算已經能夠滿足我的需求了,方法再多,反而會變成累贅。

Shell中的算術運算

當使用let時,變數名之前不能再新增 用法 var1 2 var2 3 let result var1 var2 echo result 除此之外,我們還可以使用 let 來進行自加自減操作 let var 使用let進行自加 let var 使用let進行自減 簡寫let no 6 let no ...

Shell中的算術運算 譯

儘管shell中的變數被預設地看做是string型別,而非number,但是shell本身仍然支援算術運算。主要有以下5種方式。n 6 3 echo n 6 3 declare i n 將n宣告為乙個整數 integer n 6 3 echo n 2 z 5 z expr z 1 加號 兩邊要有空格...

shell 指令碼程式設計之算術運算子

shell 的算術運算子只支援整數,浮點數的運算結果會被轉換成整數。算術運算子包括 冪運算 位左移 位右移 按位與 按位或 按位異或 按位非 使用 let expression 的方式將運算的結果儲存到變數中,如果直接寫var var1 var2這種賦值方式,則得到的結果是字串。ljx localh...