[9-13]Shell系列6——取算數運算數值

本文旨在總結shell編程中取算術運算數值的常用6種方法:let、(())、$[]、expr、bc以及awk

知識儲備:


  • Bash原生是不支持算術運算的,默認會當作字符串來處理,如下例

1
2
3
4
5


#!/bin/bash
a=15+20
echo $a
#運行結果---->
[root@centos~]#15+20

  • 對於一些需要算術運算結果的片段,如何取得算術運算結果大致有以下6種方法,分別簡單介紹

用法Let


注意點:

 <1>幾乎支持所有運算,如++、--、括號優先級等,求冪次方用**

 <2>變量引用可以不帶$號,如變量num1=num1+1

 <3>一般情況下算術表達式可以不加引號,若表達式中有bash關鍵字需加上

 <4>let後面的表達式只支持整數運算

代碼實現:

1
2
3
4
5
6
7


#!/bin/bash

read -p "Enter 2 Num: " a b
let 
"sum=a+b"
let 
"mi=$a**$b"
echo 
"sum = $sum"
echo 
"mi = $mi"

wKioL1YBCBzDYo3dAAQfnKizksg217.bmp


用法(())


注意點:

 <1>用法、支持的運算基本同let,效果基本等價

 <2>變量引用可以不帶$,建議帶上

代碼實現:

1
2
3
4
5


#!/bin/bash

read -p "Enter a number: " a
((a++))
echo $a

wKiom1YBBwyD0qBiAAN7eEv1z0w915.bmp


用法$[]


注意點:

 <1>使用比較廣泛,意思是將中括號內的表達式作爲數學運算先計算結果再輸出

 <2>$[]中變量引用可不帶$,但是建議帶上

 <3>運算支持同let,但是隻支持整數運算

代碼實現:

1
2
3
4
5
6
7
8


#!/bin/bash

if [ $# -eq 0 ];then
        echo "Please pass a parameter before EXEC!"
        exit 
1
else
        echo 
"$1*10 = $[$1*10]"
fi

wKiom1YBCfSCu1xoAATH-KsLwaA443.bmp


用法expr


注意點:

 <1>一款表達式計算工具,能夠完成表達式的求值操作,它本身是一個命令,可以直接使用

 <2>支持邏輯運算| & ,支持關係運算< <= = != ,支持算術運算+ - * / %

 <3>乘法必須使用轉義 \*否則會連接字符串

 <4>表達式和運算符之間要有空格!正確格式 ARG1 - ARG2

 <5>默認只能保留整數位,不支持浮點數運算

代碼實現:

1
2
3
4


#!/bin/bash

read -p "Enter 2 Num: " a b
echo `expr $a \* $b`

wKiom1YBDMLRVfINAATeOOPT7d4007.bmp


用法bc


注意點:

 <1>bc其實也是一個命令,是一個計算器程序,有些Linux未必自帶

 <2>bc可以實現幾乎所有運算,但是需要進入bc交互接口,所以在shell中使用管道來處理

 <3>支持浮點數運算,但是需要通過sacle指定精度

代碼實現:

1
2
3
4
5


#!/bin/bash

var=
3.14
var=`echo 
"scale=2;$var*3"|bc`
echo $var

wKiom1YBE6TRrXhAAAN7eJUIcI0680.bmp


用法awk


注意點:

 <1>awk本質是一款文本處理、格式化報表輸出工具,同時也可以作爲一門編程語言

 <2>雖然bash原生不支持運算,但是awk支持衆多運算,還能進行浮點運算

代碼實現:

1
2
3
4
5


#!/bin/bash

var=
2.71
var=`echo 
"$var 2"|awk '{printf("%g",sin($1/$2))}'`
echo $var


wKioL1YBFveTOEhnAAOmuHGWyYo405.bmp


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章