Shell 基本運(yùn)算符

Shell 基本運(yùn)算符

Shell 和其他編程語言一樣宪彩,支持多種運(yùn)算符,包括:

  • 算數(shù)運(yùn)算符
  • 關(guān)系運(yùn)算符
  • 布爾運(yùn)算符
  • 字符串運(yùn)算符
  • 文件測試運(yùn)算符

原生bash不支持簡單的數(shù)學(xué)運(yùn)算,但是可以通過其他命令來實(shí)現(xiàn)覆享,例如 awk 和 expr士葫,expr 最常用澄耍。

expr 是一款表達(dá)式計(jì)算工具抛丽,使用它能完成表達(dá)式的求值操作谤职。

例如,兩個(gè)數(shù)相加(注意使用的是反引號(hào) ` 而不是單引號(hào) '):

#!/bin/bash

val=`expr 2 + 2`
echo "兩數(shù)之和為 : $val"

執(zhí)行腳本亿鲜,輸出結(jié)果如下所示:

兩數(shù)之和為 : 4

兩點(diǎn)注意:

  • 表達(dá)式和運(yùn)算符之間要有空格,例如 2+2 是不對的冤吨,必須寫成 2 + 2蒿柳,這與我們熟悉的大多數(shù)編程語言不一樣。
  • 完整的表達(dá)式要被 反引號(hào)``包含漩蟆,注意這個(gè)字符不是常用的單引號(hào)垒探,在 Esc 鍵下邊。

算術(shù)運(yùn)算符

算術(shù)運(yùn)算符.png

注意:條件表達(dá)式要放在方括號(hào)之間怠李,并且要有空格圾叼,例如: [$a==$b] 是錯(cuò)誤的蛤克,必須寫成 [ $a == $b ]。

算術(shù)運(yùn)算符實(shí)例如下:

#!/bin/bash

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

執(zhí)行腳本夷蚊,輸出結(jié)果如下所示:

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

注意:
乘號(hào)*前邊必須加反斜杠\才能實(shí)現(xiàn)乘法運(yùn)算构挤;
if...then...fi 是條件語句,后續(xù)將會(huì)講解惕鼓。
在 MAC 中 shell 的 expr 語法是:$((表達(dá)式))筋现,此處表達(dá)式中的 "*" 不需要轉(zhuǎn)義符號(hào) "" 。

關(guān)系運(yùn)算符

關(guān)系運(yùn)算符只支持?jǐn)?shù)字箱歧,不支持字符串矾飞,除非字符串的值是數(shù)字。

下表列出了常用的關(guān)系運(yùn)算符呀邢,假定變量 a 為 10洒沦,變量 b 為 20:

關(guān)系運(yùn)算符.png
#!/bin/bash

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
 echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

執(zhí)行腳本,輸出結(jié)果如下所示:

10 -eq 20: a 不等于 b
10 -ne 20: a 不等于 b
10 -gt 20: a 不大于 b
10 -lt 20: a 小于 b
10 -ge 20: a 小于 b
10 -le 20: a 小于或等于 b

布爾運(yùn)算符

布爾運(yùn)算符
#!/bin/bash

a=10
b=20

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi

執(zhí)行腳本价淌,輸出結(jié)果如下所示:

10 != 20 : a 不等于 b
10 小于 100 且 20 大于 15 : 返回 true
10 小于 100 或 20 大于 100 : 返回 true
10 小于 5 或 20 大于 100 : 返回 false

邏輯運(yùn)算符

邏輯運(yùn)算符.png
#!/bin/bash

a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

執(zhí)行腳本微谓,輸出結(jié)果如下所示:

返回 false
返回 true

字符串運(yùn)算符

字符串運(yùn)算符.png
#!/bin/bash

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
   echo "-z $a : 字符串長度為 0"
else
   echo "-z $a : 字符串長度不為 0"
fi
if [ -n "$a" ]
then
   echo "-n $a : 字符串長度不為 0"
else
   echo "-n $a : 字符串長度為 0"
fi
if [ $a ]
then
   echo "$a : 字符串不為空"
else
   echo "$a : 字符串為空"
fi

執(zhí)行腳本,輸出結(jié)果如下所示:

abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串長度不為 0
-n abc : 字符串長度不為 0
abc : 字符串不為空

文件測試運(yùn)算符

文件測試運(yùn)算符

變量 file 表示文件"/var/www/runoob/test.sh"输钩,它的大小為100字節(jié)豺型,具有 rwx 權(quán)限。下面的代碼买乃,將檢測該文件的各種屬性:

#!/bin/bash

file="/var/www/Cooci/test.sh"
if [ -r $file ]
then
   echo "文件可讀"
else
   echo "文件不可讀"
fi
if [ -w $file ]
then
   echo "文件可寫"
else
   echo "文件不可寫"
fi
if [ -x $file ]
then
   echo "文件可執(zhí)行"
else
   echo "文件不可執(zhí)行"
fi
if [ -f $file ]
then
   echo "文件為普通文件"
else
   echo "文件為特殊文件"
fi
if [ -d $file ]
then
   echo "文件是個(gè)目錄"
else
   echo "文件不是個(gè)目錄"
fi
if [ -s $file ]
then
   echo "文件不為空"
else
   echo "文件為空"
fi
if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

執(zhí)行腳本姻氨,輸出結(jié)果如下所示:

文件可讀
文件可寫
文件可執(zhí)行
文件為普通文件
文件不是個(gè)目錄
文件不為空
文件存在
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剪验,隨后出現(xiàn)的幾起案子肴焊,更是在濱河造成了極大的恐慌,老刑警劉巖功戚,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娶眷,死亡現(xiàn)場離奇詭異,居然都是意外死亡啸臀,警方通過查閱死者的電腦和手機(jī)届宠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乘粒,“玉大人豌注,你說我怎么就攤上這事〉破迹” “怎么了轧铁?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旦棉。 經(jīng)常有香客問我齿风,道長药薯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任救斑,我火速辦了婚禮童本,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘系谐。我一直安慰自己巾陕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布纪他。 她就那樣靜靜地躺著鄙煤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茶袒。 梳的紋絲不亂的頭發(fā)上梯刚,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音薪寓,去河邊找鬼亡资。 笑死,一個(gè)胖子當(dāng)著我的面吹牛向叉,可吹牛的內(nèi)容都是我干的锥腻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼母谎,長吁一口氣:“原來是場噩夢啊……” “哼瘦黑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奇唤,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤幸斥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后咬扇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甲葬,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年懈贺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了经窖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隅居,死狀恐怖钠至,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胎源,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布屿脐,位于F島的核電站涕蚤,受9級特大地震影響宪卿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜万栅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一佑钾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烦粒,春花似錦休溶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至徒役,卻和暖如春孽尽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忧勿。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工杉女, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸳吸。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓熏挎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晌砾。 傳聞我的和親對象是個(gè)殘疾皇子坎拐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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

  • 歡迎加入技術(shù)交流群群號(hào): 552340860 Shell 和其他編程語言一樣廉白,支持多種運(yùn)算符,包括: 算數(shù)運(yùn)算符...
    ptlCoder閱讀 86評論 0 0
  • Shell 和其他編程語言一樣,支持多種運(yùn)算符楣嘁,包括:算數(shù)運(yùn)算符關(guān)系運(yùn)算符布爾運(yùn)算符字符串運(yùn)算符文件測試運(yùn)算符原生...
    楓海閱讀 283評論 0 0
  • Shell和其他編程語言一樣磅轻,支持多種運(yùn)算符,包括: 算數(shù)運(yùn)算符 關(guān)系運(yùn)算符 布爾運(yùn)算符 字符串運(yùn)算符 文件測試運(yùn)...
    海角hust閱讀 374評論 0 0
  • Shell 和其他編程語言一樣,支持多種運(yùn)算符,包括: 算數(shù)運(yùn)算符 關(guān)系運(yùn)算符 布爾運(yùn)算符 字符串運(yùn)算符 文件測試...
    進(jìn)擊的攻城獅閱讀 122評論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,407評論 0 5