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 浮點數除法計算:
樣例:
echo $(printf "%.2f" `echo "scale=2;1/3"|bc`)

