Linux shell腳本012(數學運算)

算術運算符指的是可以在程序中實現加、減、乘、除等數學運算的運算符。Shell中常用的數學運算符如下所示。

  • +:對兩個變量做加法。

  • –:對兩個變量做減法。

  • *:對兩個變量做乘法。

  • /:對兩個變量做除法。

  • **:對兩個變量做冪運算。

  • %:取模運算,第一個變量除以第二個變量求餘數。

  • +=:加等於,在自身基礎上加第二個變量。

  • -=:減等於,在第一個變量的基礎上減去第二個變量。

  • *=:乘等於,在第一個變量的基礎上乘以第二個變量。

  • /=:除等於,在第一個變量的基礎上除以第二個變量。

  • %=:取模賦值,第一個變量對第二個變量取模運算,再賦值給第一個變量。

在使用這些運算符時,需要注意到運算順序的問題。例如輸入下面的命令,輸出1+2的結果。

echo 1+2

Shell並沒有輸出結果3,而是輸出了1+2。在shell中有三種方法可以更改運算順序。

1、用expr改變運算順序。可以用echo expr 1 +2來輸出1+2的結果,用expr表示後面的表達式爲一個數學運算。需要注意的是,`並不是一個單引號,而是“Tab”鍵上面的那個符號。

[root@ansible test]# echo `expr 1 + 2`
3

2、用let指示數學運算。可以先將運算的結果賦值給變量b,運算命令是let m=1+2。然後用echo$m來輸出m的值。如果沒有let,則會輸出1+2。

[root@ansible test]# let m=5+4
[root@ansible test]# echo $m
9
[root@ansible test]# m=1+2
[root@ansible test]# echo $m
1+2

3、用[] []符號的中括號中,中括號中的內容將先進行數學運算。例如命令echo$[1+2],將輸出結果3。

[root@ansible test]# echo $[5+4]
9
[root@ansible test]# b=$[5+4]
[root@ansible test]# echo $b
9
[root@ansible test]# echo $[1.5*3]         #帶小數不適用
-bash: 1.5*3: 語法錯誤: 無效的算術運算符 (錯誤符號是 ".5*3")
[root@ansible test]# echo $[1.5+3]
-bash: 1.5+3: 語法錯誤: 無效的算術運算符 (錯誤符號是 ".5+3"

4、bc命令是一種支持任意精度的交互執行的計算器語言。bash內置了對整數四則運算的支持,但是並不支持浮點運算,而bc命令可以很方便的進行浮點運算,當然整數運算也不再話下。

[root@ansible test]# echo "1+2"
1+2
[root@ansible test]# echo "1+2"|bc
3
[root@ansible test]# m='1+2'
[root@ansible test]# echo $m
1+2
[root@ansible test]# echo $m|bc
3
[root@ansible test]# m=1+2
[root@ansible test]# echo $m|bc
3
[root@ansible test]# echo 'scale=2;2/3'|bc  #scale=2表示設置小數位爲2位
.66
[root@ansible test]# echo 'scale=2;5/3'|bc
1.66
[root@ansible test]# echo '1.5*3'|bc
4.5
[root@ansible test]# m=1.5*3
[root@ansible test]# echo $m|bc
4.5
[root@ansible test]# echo '1.55*3.1'|bc   #默認爲兩位小數
4.80
[root@ansible test]# echo 'scale=5;1.55*3.1'|bc
4.805

下面是簡單的腳本例子,此例子只是展示運算方法,並不是合適的運算方法:

#!/bin/bash
echo '輸入第一個數字:'
read a
echo '輸入第二個數字:'
read b
echo '運算結果如下:'
expr $a + $b &> /dev/null
if [ $? -eq 0 ];then       #藉此判斷a、b是否全是整數
        echo "$a+$b="$[a+b]
        echo "$a-$b="$[a-b]
        echo "$a*$b="$[a*b]
        echo "$a/$b="$[a/b]
        echo "$a%$b="$[a%b]
        echo -n "$a/$b="&&awk 'BEGIN{printf "%.5f\n",'$a' / '$b'}'
else
        echo -n "$a+$b="&&echo "$a+$b"|bc
        echo -n "$a-$b="&&echo "$a-$b"|bc
        echo -n "$a*$b="&&echo "scale=5;$a*$b"|bc
        echo -n "$a/$b="&&echo "scale=5;$a/$b"|bc
fi

參考 http://blog.csdn.net/taijianyu/article/details/6907288

發佈了24 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章