Shell中的數值運算

2021-09-24 09:39:42 字數 2464 閱讀 3339

問題

本案例要求熟悉linux shell環境的特點,主要練習以下操作:

使用expr、$[ ]、let等整數運算工具:定義變數x=1234,然後計算x與78的四則運算及求模結果

使用bc實現小數運算操作:以互動方式計算12.34與56.78的四則運算結果,另外再以非互動方式重複上述計算,最多顯示4位小數

步驟實現此案例需要按照如下步驟進行。

1)使用expr命令

乘法操作應採用 * 轉義,避免被作為shell萬用字元;參與運算的整數值與運算操作符之間需要以空格分開,引用變數時必須加$符號。

首先定義變數x=1234,然後分別計算與78的加減乘除和求模運算結果:

[root@svr5 ~]# x=1234  							//定義變數x

[root@svr5 ~]# expr $x + 78 //加法

1312

[root@svr5 ~]# expr $x - 78 //減法

1156

[root@svr5 ~]# expr $x \* 78 //乘法,操作符應新增\轉義

96252

[root@svr5 ~]# expr $x / 78 //除法,僅保留整除結果

15[root@svr5 ~]# expr $x % 78 //求模

64

2)使用[]或

或(())表示式

乘法操作*無需轉義,運算子兩側可以無空格;引用變數可省略 $ 符號;計算結果替換表示式本身,可結合echo命令輸出。

同樣對於變數x=1234,分別計算與78的加減乘除和求模運算結果:

[root@svr5 ~]# x=1234   

[root@svr5 ~]# echo $[x+78]

1312

[root@svr5 ~]# echo $[x-78]

1156

[root@svr5 ~]# echo $[x*78]

96252

[root@svr5 ~]# echo $[x/78]

15[root@svr5 ~]# echo $[x%78]

64

3)使用let命令

expr或[]、

、(())方式只進行運算,並不會改變變數的值;而let命令可以直接對變數值做運算再儲存新的值。因此變數x=1234,在執行let運算後的值會變更;另外,let運算操作並不顯示結果,但是可以結合echo命令來檢視:

[root@svr5 ~]# x=1234  

[root@svr5 ~]# let x+=78 ; echo $x

1312

[root@svr5 ~]# let x-=78 ; echo $x

1234

[root@svr5 ~]# let x*=78 ; echo $x

96252

[root@svr5 ~]# let x/=78 ; echo $x

1234

[root@svr5 ~]# let x%=78 ; echo $x

64

[root@svr5 ~]# bc 

bc 1.06.95

this is free software with absolutely no warranty.

for details type `warranty'.

12.34+56.78 //加法

69.12

12.34-56.78 //減法

-44.44

12.34*56.78 //乘法

700.66

12.34/56.78 //除法

0quit //退出互動計算器

[root@svr5 ~]#

2)bc非互動式運算

將需要運算的表示式通過管道操作交給bc運算。注意,小數字的長度可採用scale=n限制,除此以外也受參與運算的數值的小數字影響。以計算小數12.34與5.678的四則運算為例,相關操作如下:

[root@svr5 ~]# echo 'scale=4;12.34+5.678' | bc

18.018

[root@svr5 ~]# echo 'scale=4;12.34-5.678' | bc

6.662

[root@svr5 ~]# echo 'scale=4;12.34*5.678' | bc

70.0665

[root@svr5 ~]# echo 'scale=4;12.34/5.678' | bc

2.1733

shell指令碼中的數值運算

shell中的變數沒有如c語言中字元型 整型 浮點型的區分,預設將變數賦值當做字元,怎樣才能讓shell將變數賦值當做數值型呢,答案是用 一,和,包含的數學算式可以被shell正確識別。root localhost cat test.sh 例1。bin bash var1 100 var2 200 ...

shell數值運算

原文 1 錯誤方法舉例 a var 1 1 echo var 輸出的結果是1 1,悲劇,呵呵 b var 1 var var 1 echo var 輸出結果是1 1,依然悲劇,呵呵 2 正確方法 1 使用let var 1 let var 1 echo var 輸出結果為2,這次沒有悲劇 注意 a ...

Shell中的數值運算及處理

幾個數值處理技巧 小數運算操作 expr 數值1 運算子 數值2 注 使用 使需要轉義如果數值是變數的話,直接使用變數名,如 num1 10 num2 20 echo num1 num2 使用 時不需要轉義 格式 let 變數 let 變數,let 變數 let 變數,let 變數 增量,let 變...