最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell 計算器的實(shí)現(xiàn)示例

 更新時間:2024年01月02日 09:37:35   作者:一只勤勞的耗子  
在使用Linux時,我們有時會需要做一些計算,那么我們就可能需要用到計算器,本文主要介紹了shell 計算器的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下

簡介

shell 編程中的 $(( )) 、$[ ] 和 expr 僅支持整數(shù)運(yùn)算,不支持小數(shù)運(yùn)算,如果除法的結(jié)果為小數(shù),那么按取整處理。小數(shù)計算需要依賴命令,這里介紹 bc、awk 兩個命令的計算方法。

1. 整數(shù)計算

常用符號如下:

+:加法
-:減法
*:乘法
/:除法
^:冪運(yùn)算
%:取余

shell 通過 $(( )) 或 $[ ] 來計算整數(shù),比如 1+1

echo $(( 1 + 1 ))
echo $[ 1 + 1 ]

但如果將0作為除數(shù),那么直接報錯

如果計算中出現(xiàn)非變量的字母,那么這個字母會被當(dāng)做 0 處理

        

注意:$(( )) 和 $[ ] 不支持小數(shù)運(yùn)算,如果除法運(yùn)算的結(jié)果為小數(shù),那么系統(tǒng)自動取整

echo $(( 10 / 3 ))

括號中支持變量計算

對變量做運(yùn)算(修改變量)

# 定義一個變量
n=10

# 將變量+1
(( n++ ))

# 查看這個變量的結(jié)果
echo ${n}

直接對變量做計算可以直接使用 (( )),舉幾個常用的方法

(( n++ ))    # 表示變量n+1
(( n-- ))    # 表示變量n-1
(( n+=5 ))   # 表示變量n+5
(( n-=5 ))   # 表示變量n-5
(( n*=5 ))   # 表示變量n*5
(( n1 = n2 + 1 ))    # 表示變量n1 = 變量n2 + 1

所有的計算 n=n+1 都可以簡化成 n+=1,其他計算方式同理。  

除了直接使用 $(( )) 或 $[ ] 來運(yùn)算,shell 還支持 expr 來運(yùn)算整數(shù)(方法都一樣)

expr [數(shù)字1] [運(yùn)算符號] [數(shù)字2]

2. 小數(shù)計算

由于 $(( )) 和 $[ ] 不支持小數(shù)運(yùn)算,我們需要借助其他命令來實(shí)現(xiàn)。這里介紹2個命令 bc 和 awk

2.1. bc 命令計算

bc 是 Linux 中一個用于計算的命令,支持高精度的數(shù)學(xué)計算,可以進(jìn)行大多數(shù)基本的數(shù)學(xué)運(yùn)算,包括加、減、乘、除、取模、指數(shù)、三角函數(shù)等。

執(zhí)行 bc 會出現(xiàn)一個交互界面(quit 退出)

在這個交互界面中可以執(zhí)行數(shù)學(xué)運(yùn)算,回車鍵表示 "="

在腳本中我們一般不會用到交互界面,那么可以使用 bc 結(jié)合 echo 來使用。比如計算 1+1

echo "1 + 1" |bc

使用 echo 輸出一串字符,再使用管道符傳遞給 bc 使其計算。就類似于這樣

如果不指定小數(shù)點(diǎn)位數(shù),除法的結(jié)果為小數(shù)也會直接取整

echo "10 / 3" |bc

如果需要顯示小數(shù)位數(shù),那么在 echo 中指定 scale=n(n表示位數(shù))

echo "scale=2; 10 / 3" |bc

2.2. awk 命令計算

awk 命令本身是用于文件操作,由于功能強(qiáng)大,但也支持計算。

比如計算:1 + 1

awk 'BEGIN{print 1 + 1}'

awk 本身是對文件操作,如果不指定文件需要加上 BEGIN 字符來實(shí)現(xiàn)計算。      

awk 也支持小數(shù)(默認(rèn)保留5為)

awk 'BEGIN{print 10 / 3}'

指定2位小數(shù)

awk 'BEGIN{printf "%.2f", 10 / 3}'

使用變量

a=10
b=20
awk -v "a=${a}" -v "b=$" 'BEGIN{printf "%.2f", a / b}'

由于 awk 中使用的是單引號,無法轉(zhuǎn)譯變量,所以只能通過 -v 定義兩個屬于 awk 本身的變量,再執(zhí)行計算。也可以直接使用變量,但需要將 awk 外圍的單引號換成雙引號,里面的雙引號需要轉(zhuǎn)譯

a=10
b=20
awk "BEGIN{printf \"%.2f\", ${a} / $}"

也支持文件中的數(shù)據(jù)計算

【求和】

awk '{sum+=$1} END{print sum}' 文件名

【求平均數(shù)】

awk '{sum += $1} END{print sum/NR}' 文件

【求最大值】

awk 'NR==1 {max=$1} $1>max {max=$1} END{print max}' 文件

【求最小值】

awk 'NR==1 {min=$1} $1<min {min=$1} END {print min}' 文件名

【將第1列的所有值 +10 】

awk '{print $1 + 10}' 文件名

【讀取文件偶數(shù)行】

awk 'NR % 2 == 0' 文件名

到此這篇關(guān)于shell 計算器的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)shell 計算器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • shell腳本中 /dev/null 的用法小結(jié)

    shell腳本中 /dev/null 的用法小結(jié)

    /dev/null 通常被用于丟棄不需要的輸出流,或作為用于輸入流的空文件,這些操作通常由重定向完成,任何你想丟棄的數(shù)據(jù)都可以寫入其中,本文重點(diǎn)給大家介紹shell腳本中 /dev/null 的用法小結(jié),感興趣的朋友一起看看吧
    2021-09-09
  • @echo?off的作用詳解

    @echo?off的作用詳解

    本文主要介紹了@echo?off的作用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • shell 腳本中常用的內(nèi)置變量(Bash 內(nèi)置變量)

    shell 腳本中常用的內(nèi)置變量(Bash 內(nèi)置變量)

    在 Bash 解釋器中,內(nèi)置了許多變量,這些變量的功能是解釋器自帶的,我們在編寫shell腳本時如果能靈活的使用它們,對腳本的編寫效率以及差錯大有幫助, 下面一一介紹這些變量,一起看看吧
    2021-05-05
  • Linux使用iptables實(shí)現(xiàn)屏蔽ip地址的示例詳解

    Linux使用iptables實(shí)現(xiàn)屏蔽ip地址的示例詳解

    netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火墻,與大多數(shù)的Linux軟件一樣,這個包過濾防火墻是免費(fèi)的。本文就來利用iptables實(shí)現(xiàn)屏蔽ip地址,需要的可以參考一下
    2022-10-10
  • Shell腳本中使用for循環(huán)和cat命令實(shí)現(xiàn)按順序合并文件

    Shell腳本中使用for循環(huán)和cat命令實(shí)現(xiàn)按順序合并文件

    這篇文章主要介紹了Shell腳本中使用for循環(huán)和cat命令實(shí)現(xiàn)按順序合并文件,本文先是用sed命令來實(shí)現(xiàn),發(fā)現(xiàn)不能完成需求,后使用for循環(huán)解決,需要的朋友可以參考下
    2015-01-01
  • shell 里面的奇葩字符實(shí)現(xiàn)

    shell 里面的奇葩字符實(shí)現(xiàn)

    這篇文章主要介紹了shell 里面的奇葩字符實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Linux 下xargs命令詳解及xargs與管道的區(qū)別

    Linux 下xargs命令詳解及xargs與管道的區(qū)別

    在工作中經(jīng)常會接觸到xargs命令,特別是在別人寫的腳本里面也經(jīng)常會遇到,但是卻很容易與管道搞混淆,本篇會詳細(xì)講解到底什么是xargs命令,為什么要用xargs命令以及與管道的區(qū)別,本文通過實(shí)例給大家詳解,需要的的朋友參考下
    2017-04-04
  • 利用expect命令實(shí)現(xiàn)Shell自動化交互的方法詳解

    利用expect命令實(shí)現(xiàn)Shell自動化交互的方法詳解

    我們通過Shell可以實(shí)現(xiàn)簡單的控制流功能,如:循環(huán)、判斷等。下面這篇文章主要給大家介紹了關(guān)于利用expect命令實(shí)現(xiàn)Shell自動化交互的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • linux shell進(jìn)度條實(shí)現(xiàn)方法

    linux shell進(jìn)度條實(shí)現(xiàn)方法

    linux shell實(shí)現(xiàn)的一咱進(jìn)度條,代碼很簡單,供大家參考
    2013-11-11
  • linux sed命令詳解(推薦)

    linux sed命令詳解(推薦)

    sed命令是一個面向字符流的非交互式編輯器,也就是說sed不允許用戶與它進(jìn)行交互操作。接下來通過本文給大家詳細(xì)介紹linux sed命令相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2017-04-04

最新評論

克什克腾旗| 塘沽区| 紫阳县| 洛南县| 赣州市| 南陵县| 营山县| 平陆县| 洛南县| 神农架林区| 峨眉山市| 赤壁市| 城市| 昭平县| 龙海市| 永靖县| 沿河| 许昌市| 湟中县| 阳春市| 阜新| 靖安县| 怀化市| 子洲县| 乌鲁木齐市| 宁国市| 甘南县| 鄂尔多斯市| 德清县| 松原市| 城步| 化隆| 白水县| 大英县| 新巴尔虎左旗| 安塞县| 祁阳县| 阜宁县| 偏关县| 平江县| 拜泉县|