Shell腳本入門 [II.Shell運(yùn)算符]

Shell 基本運(yùn)算符

Shell 支持的運(yùn)算符包括
算數(shù)運(yùn)算符
關(guān)系運(yùn)算符
布爾運(yùn)算符
字符串運(yùn)算符
文件測試運(yùn)算符

算數(shù)運(yùn)算

原生bash不支持簡單的算數(shù)運(yùn)算肚医,但是可以通過其他命令來實(shí)現(xiàn),例如awkexpr择克,常用的是expr

  • expr是一款表達(dá)式計(jì)算工具砍聊,使用它能完成表達(dá)式的求值操作唧龄。語法為:`expr 表達(dá)式`例如:`expr a + b`局冰;在macexpr的語法是:$(expr 表達(dá)式)例如:$(expr a + b)吊洼。
  • 使用[]執(zhí)行算術(shù)训貌。比expr更簡單的可以使用[]執(zhí)行算數(shù)運(yùn)算,使用expr做運(yùn)算時(shí)乘法運(yùn)算*必須加轉(zhuǎn)義符\冒窍,才能實(shí)現(xiàn)乘法運(yùn)算递沪;使用[]則不需要轉(zhuǎn)義。
#!/bin/bash

# 表達(dá)式和運(yùn)算符之間要有空格综液,a+b寫成:a + b
# 完整的表達(dá)式被 ` ` 包含, ` 反引號(hào)
var1=`expr 2 + 2`    # 計(jì)算結(jié)果是 4
# 乘號(hào) * 前面必須加反斜杠 \ 才能實(shí)現(xiàn)乘法運(yùn)算款慨,其他的運(yùn)算不需要
var2=`expr 2 \* 2`   # 計(jì)算結(jié)果是 4

# 在Mac中shell的expr語法是:$(expr 表達(dá)式)
var3=$(expr 2 + 2)   # 計(jì)算結(jié)果是 4
var4=$(expr 2 \* 2)  # 計(jì)算結(jié)果是 4

# 使用 [] 進(jìn)行算數(shù)運(yùn)算,乘法運(yùn)算符 * 不需要轉(zhuǎn)義
var5=$[2 + 2]        # 計(jì)算結(jié)果是 4
var6=$[2 * 2]        # 計(jì)算結(jié)果是 4

常用算數(shù)運(yùn)算符有+谬莹、-檩奠、*约素、/、%(取余)笆凌、=(賦值),條件表達(dá)式運(yùn)算符有==(相等士葫。比較兩個(gè)數(shù)字是否相同)乞而、!=(不相等,比較兩個(gè)數(shù)字是否不同)慢显,注意:條件表達(dá)式要放在方括號(hào)([])內(nèi)爪模,并且要有空格,例如:比較變量a和b是否相等[ $a == $b ]荚藻。

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

關(guān)系運(yùn)算符只支持?jǐn)?shù)字屋灌,不支持字符串,除非字符串的值是數(shù)字应狱。
下表列出了常用的關(guān)系運(yùn)算符共郭,假定變量 a=10,b=20:

運(yùn)算符 說明 舉例
-eq 檢測兩個(gè)數(shù)是否相等疾呻,相等返回true [ $a -eq $b ] 返回false
-ne 檢測兩個(gè)數(shù)是否不相等除嘹,不相等返回true [ $a -ne $b ]返回true
-gt 檢測左邊的數(shù)是否大于右邊的,如果是岸蜗,則返回true [ $a -gt $b ]返回false
-lt 檢測左邊的數(shù)是否小于右邊的尉咕,如果是,則返回true [ $a -lt $b ]返回true
-ge 檢測左邊的數(shù)是否大于等于右邊的璃岳,如果是年缎,則返回true [ $a -ge $b ]返回false
-le 檢測左邊的數(shù)是否小于等于右邊的,如果是铃慷,則返回true [ $a -le $b ]返回true
布爾運(yùn)算符

下表列出了常用的布爾運(yùn)算符单芜,假定a=10,b=20:

運(yùn)算符 說明 舉例
! 非運(yùn)算枚冗,表達(dá)式為true則返回false缓溅,否則返回true [ !false ] 返回true
-o 或運(yùn)算,有一個(gè)表達(dá)式為true則返回true [ $a -lt 20 -o $b -gt 100 ]返回true
-a 與運(yùn)算赁温,兩個(gè)表達(dá)式都為true才返回true [ $a -lt 20 -a $b -gt 100 ]返回false
邏輯運(yùn)算符

Shell的邏輯運(yùn)算符如下坛怪,假定a=10,b=20:

運(yùn)算符 說明 舉例
&& 邏輯的AND [[ $a -lt 100 && $b -gt 100 ]]返回false
|| 邏輯的OR [[ $a -lt 100 || $b -gt 100 ]]返回true
字符串運(yùn)算符

Shell的字符串運(yùn)算度如下股囊,假定a="abc"袜匿,b="efg"。

運(yùn)算符 說明 舉例
= 檢測兩個(gè)字符串是否相等稚疹,相等返回true [ $a = $b ]返回false
!= 檢測兩個(gè)字符串是否相等居灯,不相等返回true [ $a != $b ]返回true
-z 檢測字符串長度是否為0祭务,為0返回true [ -z $a ]返回false
-n 檢測字符串長度是否為0,不為0返回true [ -n $a ]返回true
str 檢測字符串是否為空怪嫌,不為空返回true [ $a ]返回true
> 檢測左邊是否比右邊大义锥,如果是,返回true [ $a > $b ]返回false
< 檢測左邊是否比右邊小岩灭,如果是拌倍,返回true [ $a < $b ]返回true
文件測試運(yùn)算符

文件測試運(yùn)算符用于檢測Uinx文件的各種屬性。

操作符 說明 舉例
-b file 檢測file是否是塊設(shè)備文件噪径,如果是柱恤,則返回true [ -b $file ]返回false
-c file 檢測file是否是字符設(shè)備文件,如果是找爱,則返回true [ -c $file ] 返回false
-d file 檢測file是否存在并是目錄梗顺,如果是,則返回true [ -d $file ]返回false
-f file 檢測file是否存在并是普通文件(既不是目錄车摄,也不是設(shè)備文件)寺谤,如果是,則返回true [ -f $file ]返回true
-g file 檢測file是否設(shè)置了SGID位练般,如果是矗漾,則返回true [ -g $file ]返回false
-k file 檢測file是否設(shè)置了粘著位(Sticky Bit),如果是薄料,則返回true [ -k $file ]返回false
-p file 檢測file是否是有名管道敞贡,如果是,則返回true [ -p $file ]返回false
-u file 檢測file是否設(shè)置了SUID位摄职,如果是誊役,則返回true [ -u $file ]返回false
-r file 檢測file是否存在并可讀,如果是谷市,則返回true [ -r $file ]返回true
-w file 檢測file是否可寫蛔垢,如果是,則返回true [ -w $file ]返回true
-x file 檢測file是否可執(zhí)行迫悠,如果是鹏漆,則返回true [ -x $file ]返回true
-s file 檢測file是否存在并非空(文件大小是否大于0),不為空返回true [ -s $file ]返回true
-e file 檢測file(包括目錄)是否存在创泄,如果是艺玲,則返回true [ -e $file ]返回true
-O file 檢查file是否存在并屬當(dāng)前用戶所有 [ -O $file ]返回true
-G file 檢查file是否存在并且默認(rèn)組與當(dāng)前用戶相同 [ -G $file ]返回true
file1 -nt file2 檢查file1是否比file2新 [ $file1 -nt $file2 ]返回true
file1 -ot file2 檢查file1是否比file2舊 [ $file1 -ot $file2 ]返回false
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鞠抑,隨后出現(xiàn)的幾起案子饭聚,更是在濱河造成了極大的恐慌,老刑警劉巖搁拙,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秒梳,死亡現(xiàn)場離奇詭異法绵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)酪碘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門朋譬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兴垦,你說我怎么就攤上這事此熬。” “怎么了滑进?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長募谎。 經(jīng)常有香客問我扶关,道長,這世上最難降的妖魔是什么数冬? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任节槐,我火速辦了婚禮,結(jié)果婚禮上拐纱,老公的妹妹穿的比我還像新娘铜异。我一直安慰自己,他們只是感情好秸架,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布揍庄。 她就那樣靜靜地躺著,像睡著了一般东抹。 火紅的嫁衣襯著肌膚如雪蚂子。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天缭黔,我揣著相機(jī)與錄音食茎,去河邊找鬼。 笑死馏谨,一個(gè)胖子當(dāng)著我的面吹牛别渔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惧互,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哎媚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壹哺?” 一聲冷哼從身側(cè)響起抄伍,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎管宵,沒想到半個(gè)月后截珍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攀甚,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年岗喉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秋度。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钱床,死狀恐怖荚斯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情查牌,我是刑警寧澤事期,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站纸颜,受9級(jí)特大地震影響兽泣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胁孙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一唠倦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涮较,春花似錦稠鼻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闺属,卻和暖如春毛肋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屋剑。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工润匙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唉匾。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓孕讳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親巍膘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厂财,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,744評(píng)論 0 10
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)峡懈,也就是一...
    悟名先生閱讀 4,148評(píng)論 0 13
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,381評(píng)論 0 5
  • 菜鳥教程shell在線編輯器大目錄整理: 1.第一個(gè) Shell 腳本嘗試 2.Shell 變量 3.Shell ...
    中酷男閱讀 5,642評(píng)論 0 12
  • 致我可愛的孩子們 悠悠歲月如梭璃饱,淡淡回憶如夢,踏著如歌的節(jié)拍我們結(jié)束了五年級(jí)的快樂生活肪康。在即將邁入六年級(jí)的門檻之際...
    萬事如意6688閱讀 767評(píng)論 0 0