Linux Shell 數學運算
在Linux中直接使用數學運算子進行數學運算往往得不到我們想要的計算結果。要在Shell中進行數學運算,我們需要藉助點小手段。目前,Linux Shell中進行數學運算的方法主要有三種:bc、expr、let。
1 bc1.1 命令列方式
在bash介面,直接輸入bc或者bc -q,就可以進去bc的命令列,通過使用數學運算子能夠得到我們想要的結果:
[scott@centos1 ~]$ bc - + - - * / % ^ scale=;/ . % scale=;/ %
輸入運算數和運算子號,斷行符號即可得到運算結果。通過設定scale,可以定義當前的小數點精度,對除法、取餘和冪運算有效。
這種方式只能在bc的命令列中進行,在代碼中當然不能這樣幹了。
1.2 管道方式
[scott@centos1 ~]$ +| [scott@centos1 ~]$ -| - [scott@centos1 ~]$ *| [scott@centos1 ~]$ /| [scott@centos1 ~]$ %| [scott@centos1 ~]$ | . [scott@centos1 ~]$ | . [scott@centos1 ~]$ | [scott@centos1 ~]$ | [scott@centos1 ~]$ ^|
這種管道方式在shell中應用的更多一些,同樣可以在運算的時候加上精度的限制。
1.3 進位轉換
[scott@centos1 ~]$ | [scott@centos1 ~]$ | [scott@centos1 ~]$ |
上文的例子,是把幾種進位都轉化為10進位。
1.4 運算式運算
[scott@centos1 ~]$ vim bc- [scott@centos1 ~]$ bc -q bc- - .
其中,bc-test.bc的內容為:
+-*/=;/=;/
就是運算式的集合。
2 expr
expr是個很強大的命令,可以進行數學運算,也可以進行字串的操作等。先看下數學運算的功能。
[scott@centos1 ~]$ + + [scott@centos1 ~]$ + [scott@centos1 ~]$ + [scott@centos1 ~]$ * [scott@centos1 ~]$ \* [scott@centos1 ~]$ / [scott@centos1 ~]$ %
expr不支援浮點運算,不支援冪乘運算,在運算的時候可要注意運算子和運算數的分離,寫在一起可是不識別的,另外,乘法有點特殊,需要轉義。
下面看看expr的字串操作。
[scott@centos1 ~]$ = [scott@centos1 ~]$ length $ [scott@centos1 ~]$ index $ [scott@centos1 ~]$ substr $ [scott@centos1 ~]$ substr $ 789asdfg
上例分別利用expr命令進行了計算字串長度、擷取字串或者字元的首次出現位置、取指定位置開始的限定長度的字元字串,需要注意的是expr中的下標是從1開始的。
3 let
[scott@centos1 ~]$ let a=+ [scott@centos1 ~]$ [scott@centos1 ~]$ let a=* [scott@centos1 ~]$ [scott@centos1 ~]$ let a=/ [scott@centos1 ~]$ [scott@centos1 ~]$ let a=% [scott@centos1 ~]$ [scott@centos1 ~]$ let a=^ [scott@centos1 ~]$ [scott@centos1 ~]$ let a=** [scott@centos1 ~]$
需要注意的是,let命令裡的冪乘運算不是^,而是**。
4 其他方式
[scott@centos1 ~]$ $((+ [scott@centos1 ~]$ $((* [scott@centos1 ~]$ $((** [scott@centos1 ~]$ $((((+))* [scott@centos1 ~]$ ` Fri Aug :: PDT [scott@centos1 ~]$ ` +%Y%m%