天天看點

Shell數學運算

Shell數學運算

數學計算

shell運算符

算術運算符 說明/含義
+、- 加法(或正号)、減法(或負号)
*、/、% 乘法、除法、取餘(取模)
** 幂運算
++、– 自增和自減,可以放在變量的前面也可以放在變量的後面
!、&&、|| 邏輯非(取反)、邏輯與(and)、邏輯或(or)
<、<=、>、>= 比較符号(小于、小于等于、大于、大于等于)
==、!=、= 比較符号(相等、不相等;對于字元串,= 也可以表示相當于)
<<、>> 向左移位、向右移位
~、|、 &、^ 按位取反、按位或、按位與、按位異或
=、+=、-=、*=、/=、%= 指派運算符,例如 a+=1 相當于 a=a+1,a-=1 相當于 a=a-1

Shell 和其它程式設計語言不同,Shell 不能直接進行算數運算,必須使用數學計算指令

數學計算指令

運算操作符/運算指令 說明
(( )) 用于整數運算,效率很高,推薦使用。
let 用于整數運算,和 (()) 類似。
$[] 用于整數運算,不如 (()) 靈活。
expr 可用于整數運算,也可以處理字元串。比較麻煩,需要注意各種細節,不推薦使用。
bc

Linux下的一個電腦程式,可以處理整數和小數。

Shell 本身隻支援整數運算,想計算小數就得使用 bc 這個外部的電腦。

declare -i

将變量定義為整數,然後再進行數學運算時就不會被當做字元串了。

僅支援最基本的數學運算(加減乘除和取餘),不支援邏輯運算、自增自減等

(()) 對整數進行數學運算

雙小括号(())是shell中專門處理整數運算的指令。效率很高,寫法靈活。

可以使用

$

擷取 (( )) 指令的結果,這和使用

$

獲得變量值是類似的

示例

#!/bin/bash
a=60
b=12
c=4
#複制給變量輸出
echo $((a-b))
d=$((b*c))
echo $d
#直接解析成變量輸出
echo $((a/b))
#綜合運算
((a=a+12,b=b*2))
echo $a
echo $b
#邏輯運算
echo $((a/3 == b))
#表達式結果輸出 将傳回第二個表達式的值
echo $((a+b, a-b))
           

傳回結果

48
48
5
72
24
1
48
           

bc 小型電腦

scale 小數保留位數,預設保留0位

ibase,obase 用于進制轉換,ibase是輸入的進制,obase是輸出的進制,預設是十進制;

互動模式

參數 作用
-i 強制進入互動式模式
-l 定義使用的标準數學庫
-w 對POSIX bc的擴充給出警告資訊
-q 不列印正常的GNU bc環境資訊
-v 顯示指令版本資訊
-h 顯示指令的幫助資訊

輸入quit指令可以退出bc電腦

scale=2;1.1*1.5
1.65
ibase=10;obase=2;4*6
11000
obase=10;10^2
100
obase=10;sqrt(100)
10.00
quit
           

非互動模式

注意:ibase需要先寫,obase後寫,不然obase會成為預設的10

#!/bin/bash
a=1.1
b=1.5
#小數點位數為2
echo "scale=2;$a*$b"|bc
#輸入為十進制,輸出為二進制
echo "ibase=10;obase=2;4*6"|bc
#計算平方和平方根
echo "10^2"|bc
echo "sqrt(100)"|bc
           

傳回結果

1.65
11000
11110
100
10
           

繼續閱讀