亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Shell腳本處理浮點數的運算和比較實例

 更新時間:2014年06月04日 11:14:30   作者:  
這篇文章主要介紹了Shell腳本處理浮點數的運算和比較實例,文中分別使用了bc或awk實現,需要的朋友可以參考下

通過top命令看到的進程的CPU、內存的使用率的百分比是一個浮點數,我需要在寫腳本時對其進行處理,所以學習了一些,總結如下。

其實,Shell(這里是Bash)本身不具備處理浮點計算的能力,但是可以使用“bc”這個高精度的計算器工具來幫助,另外,也可以在Bash中調用“awk”腳本來處理浮點運算。

1. 用bc來處理計算(包括整型和浮點計算)

bc – An arbitrary precision calculator language
(1). 通常在Bash腳本中使用bc的范例格式為:
variable=$(echo “OPTIONS; OPERATIONS” | bc [options]) 即:echo “[選項];操作” | bc [選項]
(2). 在下面的腳本中,提到在第一個選項中,“scale”變量表示輸出中小數點后的精度,可以用于控制計算結果的精度;“ibase”和“obase”分別表示輸入和輸出數據的進制,可以用于數值進制的轉換。
(3). 浮點數的比較,如“if [ $(echo "$big > $small" | bc) -eq 1 ]”,將一個邏輯判斷式用管道傳給bc。如果結果為真則輸出1,否則輸出0,然后就可以利用這個結果進行進一步的操作了。
(4). bc本來是用一個文件作為輸入進行計算的(后面也有演示),所以可以將很復雜的計算寫到文件中,然后讓bc工具去處理到處計算結果。
注意一下:在使用除法運算符/時,要想保留小數,需要自己設置scale,否則默認時scale,小數點后時0位。

2. 使用awk來處理浮點計算和浮點數比較

不解釋過多了,寫了示例腳本如下,看懂了這個就會知道怎么處理浮點計算和浮點數比較了。

復制代碼 代碼如下:

#!/bin/bash
# author: Jay <smile665@gmail.com>
# some examples for playing with floating point number.

# basic usage of 'bc' tool in Bash.
a=3.33
b=3.3
c=$(echo "$a + $b" | bc)
d=$(echo "$a * $b" | bc)
e=$(echo "scale=5; $a / $b" | bc)
echo "c=a+b=$a+$b=$c"
echo "d=a*b=$a*$b=$d"
echo "e=a/b=$a/$b=$e"

# "-l" parameter for 'bc' means using math library.
pi=$(echo "scale=10; 4*a(1)" | bc -l)
s=$(echo "s($pi/6)" | bc -l)
echo "pi=$pi"
echo "s=sin(pi/6)=$s"

# use more options of 'bc' tool
r=$(echo 'ibase=10;obase=2; 15+16' | bc)
echo "binary of (15+16) is $r"

# comparison for floating point numbers using 'bc'
big=100
small=99.9
if [ $(echo "$big > $small" | bc) -eq 1 ]; then
        echo "$big is bigger than $small"
fi

# deal with floating point numbers with 'awk' language
echo $(awk -v x=10 -v y=2.5 'BEGIN {printf "10/2.5=%.2f\n",x/y}')
v=$(echo $big $small | awk '{ printf "%0.8f\n" ,$1/$2}')
echo "$big / $small = $v"

echo $big $small | awk '{if($1>$2) {printf"%f > %f\n",$1,$2} else {printf"%f <%f\n",$1,$2}}'

執(zhí)行的結果如下:

復制代碼 代碼如下:

master@jay-linux:~/workspace/mygit/shell/sh2012$ ./floating-point.sh
c=a+b=3.33+3.3=6.63
d=a*b=3.33*3.3=10.98
e=a/b=3.33/3.3=1.00909
pi=3.1415926532
s=sin(pi/6)=.49999999994373819220
binary of (15+16) is 11111
100 is bigger than 99.9
10/2.5=4.00
100 / 99.9 = 1.00100100
100.000000 > 99.900000

另外,bc處理一個文件中的計算邏輯,演示如下:

復制代碼 代碼如下:

master@jay-linux:~/workspace/mygit/shell/sh2012$ cat temp.bc
3+8
3/8
scale=2; 3/8

master@jay-linux:~/workspace/mygit/shell/sh2012$ bc -q temp.bc
11
0
.37

bc是強大的工具,請“man bc”查看詳情;同樣,請“man awk”。

 

相關文章

  • 備份shell腳本實例代碼

    備份shell腳本實例代碼

    備份shell腳本一例,有需要的朋友可以參考下
    2013-02-02
  • 使用shell腳本取出服務器圖片的方法

    使用shell腳本取出服務器圖片的方法

    Shell 腳本(shell script),是一種為 shell 編寫的腳本程序。下面通過本文給大家介紹使用shell腳本取出服務器圖片的方法,需要的朋友參考下吧
    2017-12-12
  • getopts解析shell腳本命令行參數的方法

    getopts解析shell腳本命令行參數的方法

    getpots是Shell命令行參數解析工具,旨在從Shell Script的命令行當中解析參數,這篇文章主要介紹了getopts解析shell腳本命令行參數,需要的朋友可以參考下
    2023-01-01
  • 一天一個shell命令 linux文本操作系列-wc命令詳解

    一天一個shell命令 linux文本操作系列-wc命令詳解

    這篇文章主要介紹了一天一個shell命令 linux文本操作系列-wc命令詳解,需要的朋友可以參考下
    2016-06-06
  • Linux 分區(qū)初始化為物理卷,把物理卷加入卷組的方法

    Linux 分區(qū)初始化為物理卷,把物理卷加入卷組的方法

    下面小編就為大家?guī)硪黄狶inux 分區(qū)初始化為物理卷,把物理卷加入卷組的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 設置Shell腳本開機自啟的方法和實例

    設置Shell腳本開機自啟的方法和實例

    這篇文章主要介紹了設置Shell腳本開機自啟的方法和實例,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • 批量修改ssh配置的expect腳本

    批量修改ssh配置的expect腳本

    公司服務器一般通過ssh進行遠程管理。以前大家登錄的時候,都是隨意選內外網IP進入。王總接手后,說這事隱患太大了,必須禁了外網ssh
    2013-03-03
  • Linux解壓縮(打開)Gz文件的命令詳解

    Linux解壓縮(打開)Gz文件的命令詳解

    GNU 的 Gzip 是一種流行的數據壓縮程序,而 GZ 文件是由標準 Gzip 壓縮的存檔文件,本文給大家介紹了如何在Linux解壓縮(打開)Gz 文件,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • Linux 中shell腳本設置開頭固定格式的實現方法

    Linux 中shell腳本設置開頭固定格式的實現方法

    這篇文章主要介紹了Linux 中shell腳本設置開頭固定格式的實現方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 淺談shell腳本中的控制流結構

    淺談shell腳本中的控制流結構

    今天小編就為大家分享一篇關于淺談shell腳本中的控制流結構,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論