【四則運算子號】
表示式 | 舉例 |
---|---|
$(( )) | echo $((1+1)) |
$[ ] | echo $[10-5] |
expr | expr 10 / 5 (運算子左右有空格) |
let | n=1;let n+=1 等價於 let n=n+1 |
一、整數運算
1、基本運算類別
- 加法:+
- 減法:-
- 乘法:*
- 整除:/
- 取餘數:%
2、expr運算工具
- 加法:+
- 減法:-
- 乘法:*
- 整除:/
- 取餘數:%
3、$[ ]算式替換
使用$[ ] 或 $(( ))表示式
- 格式:$[整數1 運算子 整數2 .. ..]
- 乘法操作*無需轉譯,運算子兩側可以無空格
- 引用變數可省略$符號
- 計算結果替換表示式本身,可結合echo命令輸出
注意:
指令碼第2行
if [ $# -lt 1 -o $1 -gt 9 ] ; then
如果替換為 :
if (( $# < 1 || $1 > 9 )); then
結果會怎麼樣 ? 為什麼 ?
在判斷數值大小除了可以用”(( ))”的形式外,還可以使用”[ ]”。但是就不能使用>, < , = 這樣的符號了,要使用 -lt (小於),-gt (大於),-le (小於等於),-ge (大於等於),-eq (等於),-ne (不等於)
&&,邏輯的and的意思, -a也是這個意思;
||,邏輯的or的意思, -o 也是這個意思
[root@scp1 ~]# x=30
[root@scp1 ~]# echo $[x+20]
50
[root@scp1 ~]# echo $((x+10)),$((x*60))
40,1800
4、變數的自增/減等操作
使用$[]替換,或let命令完成
結合echo命令檢視結果
二、小數運算
1、整數運算的侷限性
- bash內建機制僅支援整數值運算
- expr命令、$[] 算式運算不支援有小數的運算
2、使用bc實現小數的運算
多數linux系統預設安裝此工具
- 支援高精度的數值運算
- 直接執行bc可進入互動式運算介面,quit退出
- 設定scale=n 可約束小數位
結合管道向bc傳送表示式
- 多個表示式以分號分隔
- 透過echo命令+管道傳遞要計算的表示式
小數值的比較
基本用法
- echo "數值1 比較符 數值2" | bc
- 如果表示式成立,則返回的計算結果為1,否則返回0
- 常見的比較操作:>、>=、<、<+、==、!=
三、瞭解i++和++i
- ++ 是字尾自增運算子,表示在表示式求值後,變數 i 的值增加 1。
- ++j 是字首自增運算子,表示在表示式求值前,變數 j 的值增加 1。
在表示式 let x=i++ 中,i 的值在賦值給 x 後增加,所以 x 得到的是 i 增加前的值。而在表示式 let y=++j 中,j 的值在賦值給 y 之前就已經增加了,所以 y 得到的是 j 增加後的值。
1、對變數的值的影響
[root@MissHou ~]# i=1
[root@MissHou ~]# let i++
[root@MissHou ~]# echo $i
2
[root@MissHou ~]# j=1
[root@MissHou ~]# let ++j
[root@MissHou ~]# echo $j
2
2、對錶達式的值的影響
[root@MissHou ~]# unset i j
[root@MissHou ~]# i=1;j=1
[root@MissHou ~]# let x=i++ 先賦值,再運算
[root@MissHou ~]# echo $x
1
[root@MissHou ~]# let y=++j 先運算,再賦值
[root@MissHou ~]# echo $y
2
[root@MissHou ~]# echo $i
2
[root@MissHou ~]# echo $j
2