1、expr 用法比較麻煩很少使用。
示例:[jamin@localhost ~]$ expr 1 + 2
3+ 號兩邊必須有空格
[jamin@localhost ~]$ expr 3 \* 2
6* 號是特殊字元。
2、使用[ ]
示例:[jamin@localhost ~]$ echo $[ 1 + 2 ]
3[jamin@localhost ~]$ echo $[ 3 * 2 ]
6shell 中使用:
#!/bin/bash
a=100
b=2c=5
echo $[ $a - $[$b * $c] ]
3、使用雙括號 (())
$ echo $((3 + 2))
5echo $(( 3 * 2 ))
6shell 中使用:
#!/bin/bash
a=100
b=2c=5
echo $(( $a - $(($b * $c)) ))
上面的示例中沒有列出除,因為shell 只支援整數運算。
雙括號的數學表示式 (( expression ))
可以使用的命令符號
var++ 後增
var-- 後減
++var 先增
--var 先減
! 邏輯求反
~ 位求反
** 冪運算
<< 左移位
>> 右移位
& 位布林和
| 位布林或
&& 邏輯和
|| 邏輯或
示例:$ echo $((100 ** 2))
10000
注:也可以使用到 if 語句中。
簡單示例:
#!/bin/bash
a=100
if (( $a ** 2 > 1000 ));then
a2 = $(($a ** 2))
echo "100 square is $a2"
fifor 迴圈計算1...10的和
#!/bin/bash
sum=0
for (( i=1;i<11;i++ ))
dosum=$(($sum+$i))
done
echo $sum
浮點數運算解決方法
1、bash 計算器bc。bc 中一種程式語言,它允許輸入浮點數進行計算。
安裝bc
$sudo yum install bc -y
示例:先輸入bc 命令
$ bc #bc -p 可以去除下面的歡迎資訊
bc 1.06.95
this is free software with absolutely no warranty.
for details type `warranty'.
2 + 3
52 * 3
62 - 3
-12.2 * 3.3
7.22/3
0上面的示例中,乘法和除法並沒有得到我們想要的結果。
浮點運算是由內建變數scale控制的。必須將這個值設定為你希望在計算結果中保留的小數字數,否則無法得到期望的結果。
接著上面示例
scale=4
2.2 * 3.3
7.26
a=100 #定義變數後,可以在整個bc 會話中使用了。重新進入bc ,變數消失
b=5c=2
print a #print 可以列印變數的值
shell 中使用bc
示例:#!/bin/bash
var=$(echo "scale=4;a=10;b=3; a / b" | bc)
echo $var
注:定義多個變數用『;』號隔開,變數a,b 也可以在shell 中定義。如下:
#!/bin/bash
a=10
b=3var=$(echo "scale=4; $a / $b " | bc)
echo $var
計算式比較長時,上面處理不方便。bc命令能識別輸入重定向,但是這樣要把表達示寫入檔案中,也不可取。
最好的辦法是使用內聯輸入重定向,它允許你直接在命令列中重定向資料。
示例:使用等差數列求和公式(s = n*a1 + n(n-1)*d/2 )計算1...100 的和
#!/bin/bash
a1=1
n=100
d=1sum=$(bc << eof
sum_1 = $n * $a1
sum_2 = $n * ($n - 1) * $d / 2
sum_1 + sum_2
eof)
注:eof文字字串標識了內聯重定向資料的起止。仍然需要命令替換符號將bc命令的輸出賦給變數
編寫自己的shell(2)
指令碼中除了命令之外還包括以下元素 變數,使用者輸入,控制流,環境變數。上一次用fork,execvp,wait實現了乙個能夠建立程序和執行程式的shell。此次對這個shell做一些改進。加入命令列解析,這樣使用者可以在一行中輸入命令和所有引數了,然後將控制語句if.then加入到這個shell中...
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 2 顯示帶顏色字型
shell指令碼中echo顯示內容帶顏色顯示,echo顯示帶顏色,需要使用引數 e,格式如下 echo e 033 字背景顏色 文字顏色m字串 033 0m 例如echo e 033 41 36m something here 033 0m 其中41的位置代表底色,36的位置是代表字的顏色 注 字型...