bash shell的數值計算
阿新 • • 發佈:2018-11-10
1. 資料計算基礎
使用man 或者info檢視shell bash的判斷命令test,Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字元和檔案三個方面的測試。
man test info test
可以使用type檢視一個命令是否是shell內建的函式,例如
$ type typetype is a shell builti $ type awk awk is /usr/bin/awk
從結果可知: let 是 Shell 內建命令,awk是外部命令,在 /usr/bin 目錄下
expr命令是一個手工命令列計數器,用於在UNIX/LINUX下求表示式變數的值,一般用於整數值,也可用於字串。
$ expr 5 % 21
bc 命令是任意精度計算器語言,通常在linux下當計算器用。它類似基本的計算器, 使用這個計算器可以做基本的數學運算。
$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 3^2 9
let 命令是 BASH 中用於計算的工具,用於執行一個或多個表示式,變數計算中不需要加上 $ 來表示變數。如果表示式中包含了空格或其他特殊字元,則必須引起來。
$ let a=1+1; echo $a2
2. 求模求冪
$ expr 5 % 2 1 $ let i=5%2 $ echo $i1 $ echo 5 % 2 | bc 1 $ ((i=5%2)) $ echo $i1 $ let i=5**2 $ echo $i25 $ ((i=5**2)) $ echo $i25 $ echo "5^2" | bc 25
3. 浮點數計算
let 和 expr 都無法進行浮點運算,但是 bc 和 awk 可以。
$ echo "scale=3; 1/13" | bc .076 $ echo "1 13" | awk '{printf("%0.3f\n",$1/$2)}'0.077
bc 在進行浮點運算時需指定精度,否則預設為 0,即進行浮點運算時,預設結果只保留整數。而 awk 在控制小數位數時非常靈活,僅僅通過 printf 的格式控制就可以實現。
4. 獲取隨機數
環境變數 RANDOM 產生從 0 到 32767 的隨機數,而 awk 的 rand() 函式可以產生 0 到 1 之間的隨機數。
$ echo $RANDOM81 $ echo "" | awk '{srand(); printf("%f", rand());}'0.237788
說明: srand() 在無引數時,採用當前時間作為 rand() 隨機數產生器的一個 seed 。
隨機產生一個從 0 到 255 之間的數字
$ expr $RANDOM / 128 208 $ echo "" | awk '{srand(); printf("%d\n", rand()*255);}'104
5. 獲取一系列數
使用seq命令
$ for i in {1..12}; do echo -n "$i "; done1 2 3 4 5 6 7 8 9 10 11 12 %