儘管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` # 加號(+)兩邊要有空格
$ echo $z
5+1$ z=`expr $z + 1`
$ echo $z
6
$ let z=5$ echo $z
5$ let z=$z+1
$ echo $z
6$ let z=$z + 1 # 與expr相反, 在加號(+)兩邊加空格會導致let報錯!
-bash: let: +: syntax error: operand expected (error token is "+")
$let z=z+1 # 在讀取變數值的時候,可以省略美元符號($)
$echo $z
7
$ ((e=5))$ echo $e
5$ (( e = e + 3 ))
$ echo $e
8$ (( e=e+4 )) # 加號(+)兩邊的空格可加可不加
$ echo $e
12
支援的算術運算有:
符號含義
+ –加減
++ —
自增 自減
* / %
乘 除 取模**冪
除了支援算術運算外,還支援邏輯運算:
if (( x > y )); thenecho "x > y"
fi
支援的邏輯運算有:
符號含義
<= >= < >
小於等於 大於等於 小於 大於
== !=
相等 不等!否定
&&與||或
bc
支援浮點運算,這在let
和(())
中是不支援的。
$let r=3.5-bash: let: r=3.5: syntax error in expression (error token is ".5")
$(( r = 3.5 ))
-bash: ((: r = 3.5 : syntax error in expression (error token is ".5 ")
bc
的用法如下:
$ bcbc 1.06
this is free software with absolutely no warranty.
for details type `warranty'.
3 + 2
5obase=2
121100
注意,使用ctrl + d
(eof)可以退出bc
。
$r=3.5$s=`echo "$r + 2.2" | bc`
$echo $s
5.7$ z=`echo "$z + 1" | bc`
$ echo $z
8$ z=`echo "$z+1" | bc` # 加號(+)兩邊的空格可加可不加
$ echo $z
9
有一下3種方式比較數字型別變數的大小。
符號含義
舉例-eq
相等[ 『1』 -eq 1 ]
-gt大於
[ 2 -gt 1 ]
-ge大於等於
[ 2 -ge 1 ]
-lt小於
[ 2 -gt 3 ]
-le小於等於
[ 2 -le 『3』]
-ne不等於
[ $var1 -ne $var2 ]
以下2個表示式是等價的。
if (( x < y )); thenstatements
fiif [ $x -lt $y ]; then
statements
fi
bc
可以用於比較浮點數的大小:當比較結果為真(true)
時,返回1
;否則返回0
。舉個例子:
if [ $( echo "$t < 3.4" | bc ) -eq 1 ]; thenstatements
fi
原文: math in shell scripts
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指令碼中的算術運算
本文將介紹6種shell指令碼中算術運算的方法,各有優缺點,當然了,最常用的就那兩種,我會特別指出。6種算術運算方法是 let operation expr operation operation operation 用awk 做算術運算 echo operation bc let no1 let ...
Linux之Shell的算術運算
在bash的算術運算中有以下幾種方法 名稱 語法 範例 算術擴充套件 算術式 r 1 2 3 使用外部程式expr expr 算術式 r expr 1 2 3 使用 算術式 r 1 2 使用內建命令 declare i 變數 算術式 declare i r 1 2 3 使用內建命令let let 算...