Shell編程-06-Shell中變量數(shù)值計算

算術(shù)運算符

? ? 在任何一門形式的語言中均會存在算術(shù)運算的情況认然,Shell常見的運算符如下所示:

運算符 含義
+ - * / % 加 減 乘 除 求余
** 冪運算
++ -- 自增 自減
&& || ! 與(and) 或(or) 非(取反)
< <= > >= == != 小于 小于等于 大于 大于等于 等于 不等于
<< >> 左移位 右移位
~ | & ^ 按位取反 按位異或 按位與 按位或
= += -= *= /= %= 如a+=1與a=a+1相同

算術(shù)運算命令

運算命令 含義
(()) 整數(shù)運算,效率很高
let 整數(shù)運算奏候,類似于(())
expr 整數(shù)運算,另外還有很多額外功能
bc Linux中的計算器臀玄,適合整數(shù)及小數(shù)運算
$[] 整數(shù)運算
awk 既可用于整數(shù)運算,也可用于小數(shù)運算
declare 定義變量值和屬性,-i 參數(shù)可以用于定義整型變量并進(jìn)行運算

數(shù)值運算用法

(())用法

? ? 雙小括號常用于數(shù)值運算和數(shù)值比較,因其效率很高扫夜,用法靈活,因此是常用的運算之一驰徊。

示例 含義 備注
((i=i+1)) 運算后并進(jìn)行賦值笤闯,即先進(jìn)行i+1計算并將該值賦值給i 只能使用echo $((i=i+1))進(jìn)行輸出
i=$((i+1)) 表達(dá)式進(jìn)行運算后并將值賦給i
((2>1&&8>3)) 進(jìn)行比較后再進(jìn)行邏輯運算 常用于條件判斷
echo $((4+2)) 直接進(jìn)行計算并輸出結(jié)果

(())用法示例

[root@localhost ~]# echo $((90-12));echo $((80+12)) # 基本運算
78
92
[root@localhost ~]# ((a=100))
[root@localhost ~]# ((a*=2))
[root@localhost ~]# echo $a  # 輸出運算結(jié)果
200
[root@localhost ~]# ((a=100+2**10-200%100)) # 復(fù)雜運算
[root@localhost ~]# echo $a
1124
[root@localhost ~]# a=$((50**2*2+2500)) # 運算并進(jìn)行賦值
[root@localhost ~]# echo $a
7500
[root@localhost ~]# a=100
[root@localhost ~]# echo $((a++));echo $((++a)) # 自增運算
100
102
[root@localhost ~]# echo $((a**2))
10404
[root@localhost ~]# echo $((2==2)) # 比較運算
1                                  # 1:代表結(jié)果為真
[root@localhost ~]# echo $((2>2))
0                                  # 0:代表結(jié)果為假

++/--:如果++/--在變量前面,則代表先進(jìn)行運算再輸出結(jié)果棍厂,如果++/--在變量后面颗味,則先輸出結(jié)果再進(jìn)行運算
(()):在執(zhí)行命令時不需要添加$,直接使用((4+3))即可牺弹,如果輸出進(jìn)行變量賦值,則需要添加$张漂,如使用a=$((4+3))
(())中所有字符中有無空格均不受影響

let用法

? ? let的語法格式如下所示:

let var=value

let用法示例

[root@localhost ~]# a=8
[root@localhost ~]# b=9
[root@localhost ~]# c=$a+$b
[root@localhost ~]# echo $c
8+9                          # 進(jìn)行字符串連接
[root@localhost ~]# let c=$a+$b
[root@localhost ~]# echo $c
17                           # 進(jìn)行相加

let let c=$a+$b等同于((c=$a+$b))

expr用法

? ? expr的語法格式如下所示:

expr 表達(dá)式

expr用法示例

[root@localhost ~]# expr 4+8; expr 2*5
4+8
2*5
[root@localhost ~]# expr 4 + 8; expr 2 \* 5 # 注意空格
12
10
[root@localhost ~]# a=100
[root@localhost ~]# b=200
[root@localhost ~]# c=`expr $a + $b`
[root@localhost ~]# echo $c
300
[root@localhost ~]# a=2
[root@localhost ~]# b=5
[root@localhost ~]# c=`expr $a \* $b`
[root@localhost ~]# echo $c
10

使用expr的注意事項如下所示:
運算符與計算項之間左右間必須要有一個空格鹃锈,否則會出現(xiàn)報錯
使用*需要進(jìn)行轉(zhuǎn)義符\

bc用法

? ? bc是Linux中的計算器荤胁,可作為命令行計算工具使用

bc用法示例

[root@localhost ~]# 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'.
1+2
3
1.0369+2.014789
3.051689

[root@localhost ~]# echo 100+200 | bc # 通過管道進(jìn)行計算
300
[root@localhost ~]# a=250
[root@localhost ~]# b=360
[root@localhost ~]#  c=`echo $a + $b | bc`
[root@localhost ~]# echo $c
610

awk用法示例

[root@localhost ~]# echo "12.36 12.36" | awk '{print $1+$2}'
24.72
[root@localhost ~]# echo "12.36 12.36" | awk '{print $1*$2+$2}'
165.13
[root@localhost ~]# echo "12.36 12.36" | awk '{print $1*($2+$2)}'
305.539
[root@localhost ~]# echo "10 100" | awk '{print $1*($2+$2)}'
2000

declare用法

? ? declare的語法格式如下所示:

declare -i var=value

declare用法示例

[root@localhost ~]# declare -i a=120 b=130
[root@localhost ~]# a=a+b           #因為已經(jīng)申明為整數(shù),可以直接進(jìn)行運算
[root@localhost ~]# echo $a
250

$[]用法示例

[root@localhost ~]# a=120
[root@localhost ~]# b=1290
[root@localhost ~]# a=$[a+b]
[root@localhost ~]# echo $a
1410
[root@localhost ~]# echo $[5/3]
1
[root@localhost ~]# echo $[5%3]
2

read用法示例

[root@localhost ~]# read -t 20 -p "Input 3 number:" a b c
Input 3 number:1 2 3
[root@localhost ~]# echo $a $b $c # 通過用戶輸入傳遞變量賦值
1 2 3
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屎债,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盆驹,更是在濱河造成了極大的恐慌,老刑警劉巖躯喇,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辫封,死亡現(xiàn)場離奇詭異,居然都是意外死亡廉丽,警方通過查閱死者的電腦和手機倦微,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門正压,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人焦履,你說我怎么就攤上這事雏逾≈A伲” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵厢洞,是天一觀的道長。 經(jīng)常有香客問我犀变,道長,這世上最難降的妖魔是什么获枝? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任省店,我火速辦了婚禮嚣崭,結(jié)果婚禮上懦傍,老公的妹妹穿的比我還像新娘。我一直安慰自己粗俱,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布签财。 她就那樣靜靜地躺著,像睡著了一般唱蒸。 火紅的嫁衣襯著肌膚如雪灸叼。 梳的紋絲不亂的頭發(fā)上神汹,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天古今,我揣著相機與錄音,去河邊找鬼捉腥。 笑死,一個胖子當(dāng)著我的面吹牛披诗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呈队,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宪摧!你這毒婦竟也來了颅崩?” 一聲冷哼從身側(cè)響起几于,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤沿后,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尖滚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡漆弄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了廉邑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛛蒙,死狀恐怖恨锚,靈堂內(nèi)的尸體忽然破棺而出宇驾,到底是詐尸還是另有隱情猴伶,我是刑警寧澤课舍,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布他挎,位于F島的核電站,受9級特大地震影響办桨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呢撞,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一饰剥、第九天 我趴在偏房一處隱蔽的房頂上張望摧阅。 院中可真熱鬧,春花似錦棒卷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽测秸。三九已至灾常,卻和暖如春乞封,著一層夾襖步出監(jiān)牢的瞬間岗憋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工仔戈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人监徘。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓凰盔,卻偏偏與公主長得像墓卦,于是被迫代替她去往敵國和親户敬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,378評論 0 5
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)忠怖,也就是一...
    悟名先生閱讀 4,132評論 0 13
  • 菜鳥教程shell在線編輯器大目錄整理: 1.第一個 Shell 腳本嘗試 2.Shell 變量 3.Shell ...
    中酷男閱讀 5,557評論 0 12
  • 2017年7月3日 星期一 晴 假期已經(jīng)過了3天了凡泣,雖然我沒時間陪女兒,但他自己這兩天玩兒的可挺好鞋拟,就是作...
    云哲云燦媽媽閱讀 202評論 0 0
  • 多年以前,去超市的路上遇到一個老人贺纲,需要3塊錢打電話回家,讓親人來接他回家哮笆,于是汰扭,我給了他5塊錢稠肘。我買完東西從另一...
    失眠的考拉Oh閱讀 754評論 0 0