shell(7):四則運算


 shell 四則運算:expr,let,bc,(()),

1、expr的用法:

expr命令是一個手工命令行計數器,用於在UNIX/LINUX下求表達式變量的值,一般用於整數值,也可用於字符串。

詳細使用方式:expr --help

expr 表達式

表達式說明:

 

  • 用空格隔開每個項;
  • 用 / (反斜杠) 放在 shell 特定的字符前面;
  • 對包含空格和其他特殊字符的字符串要用引號括起來

使用實例:

1、計算字串長度

> expr length "this is a test" 14

2、抓取字串

> expr substr "this is a test" 3 5 is is

3、抓取第一個字符數字串出現的位置

> expr index "sarasara" a 2

4、整數運算

 > expr 14 % 9 5 > expr 10 + 10 20 > expr 1000 + 900 1900 > expr 30 / 3 / 2 5 > expr 30 \* 3 (使用乘號時,必須用反斜線屏蔽其特定含義。因為shell可能會誤解顯示星號的意義) 90 > expr 30 * 3 expr: Syntax error

 

2、let的用法:

let 命令是 BASH 中用於計算的工具,用於執行一個或多個表達式,變量計算中不需要加上 $ 來表示變量。如果表達式中包含了空格或其他特殊字符,則必須引起來。

語法格式

let arg [arg ...]

參數說明:

arg:要執行的表達式

實例:

自加操作:let no++

自減操作:let no--

簡寫形式 let no+=10,let no-=20,分別等同於 let no=no+10,let no=no-20

以下實例計算 a 和 b 兩個表達式,並輸出結果:

#!/bin/bash let a=5+4 let b=9-3 
let c=7/4
let d=4*6
let e=1+4*6+3*2+2
let f=1+4*6+3*2+2+8/5
echo $a $b $c $d $e $f

以上實例執行結果為:

9 6 1 24 33 34

有些用法區別去expr:

let 不需要空格隔開表達式的各個字符。而 expr 后面的字符需要空格隔開各個字符。

# expr 實例 $ s=`expr 2 + 3` $ echo $s 5 # let 實例 $ let s=(2+3)*4 $ echo $s

 

3、(()) 的用法:

echo $((運算表達式))

echo $((1+4*6+3*2+2+8/7))

34

4、bc的用法

 

bc 命令是任意精度計算器語言,通常在linux下當計算器用。

 

它類似基本的計算器, 使用這個計算器可以做基本的數學運算。

 

常用的運算:

 

  • + 加法
  • - 減法
  • * 乘法
  • / 除法
  • ^ 指數
  • % 余數

語法

bc(選項)(參數)

選項值

  • -i:強制進入交互式模式;
  • -l:定義使用的標准數學庫
  • ; -w:對POSIX bc的擴展給出警告信息;
  • -q:不打印正常的GNU bc環境信息;
  • -v:顯示指令版本信息;
  • -h:顯示指令的幫助信息。

參數

文件:指定包含計算任務的文件。

實例

$ bc
bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 2+3 5 5-2 3 2+3*1 5

輸入 quit 退出。

通過管道符

$ echo "15+5" | bc 20

scale=2 設小數位,2 代表保留兩位:

$ echo 'scale=2; (2.777 - 1.4744)/1' | bc 1.30

bc 除了 scale 來設定小數位之外,還有 ibase 和 obase 來其它進制的運算:

$ echo "ibase=2;111" |bc 7

進制轉換

#!/bin/bash abc=192 echo "obase=2;$abc" | bc <pre> <p> 執行結果為:11000000,這是用bc將十進制轉換成二進制。</p> <pre> #!/bin/bash  abc=11000000 echo "obase=10;ibase=2;$abc" | bc

執行結果為:192,這是用bc將二進制轉換為十進制。

計算平方和平方根:

$ echo "10^10" | bc 10000000000 $ echo "sqrt(100)" | bc 10

5、shell 浮點數除法計算:

樣例:

num1=2
num2=3
num3=`expr $num1 / $num2`
這個時候num3=0 ,是因為是因為expr不支持浮點除法
解決的方法:
num3=`echo "scale=2; $num1/$num2" | bc`

 

帶小數點顯示:

echo $(printf "%.2f" `echo "scale=2;1/3"|bc`)

 

使用bc工具,scale控制小數點后保留幾位
還有一種方法,使用awk進行計算:
awk 'BEGIN{printf "%.2f\n",’$num1‘/’$num2‘}'
 
如果用百分比表示:
awk 'BEGIN{printf "%.2f%\n",(’$num1‘/’$num2‘)*100}'

 

網上找的awk和bc效率對比的截圖:
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM