從零開始學習Linux(四十六):Shell編程之條件判斷

1焚鲜、按照文件類型進行判斷

測試選項 作用
-b 文件 判斷該文件是否存在掌唾,并且是否為塊設(shè)備文件(是塊設(shè)備文件為真)
-c 文件 判斷該文件是否存在,并且是否為字符設(shè)備文件(是字符設(shè)備文件為真)
-d 文件 判斷該文件是否存在忿磅,并且是否為目錄文件(是目錄為真)
-e 文件 判斷該文件是否存在(存在為真)
-f 文件 判斷該文件是否存在糯彬,并且是否為普通文件(是普通文件為真)
-L 文件 判斷該文件是否存在,并且是否為管道文件(是管道文件為真)
-p 文件 判斷該文件是否存在葱她,并且是否為符號鏈接文件(是符號鏈接文件為真)
-s 文件 判斷該文件是否存在撩扒,并且是否為非空(非空為真)
-S 文件 判斷該文件是否存在,并且是否為套接字文件(是套接字文件為真)

其中-d 文件览效、-e 文件却舀、-f 文件虫几,這三種使用最多。

2挽拔、判斷命令格式

2.1辆脸、格式一

test -e /opt/shell/score.txt

執(zhí)行命令:

test -e /opt/shell/score.txt

使用echo $? 命令顯示剛剛的執(zhí)行結(jié)果。最終結(jié)果如下圖所示:

2.2螃诅、格式二(推薦使用這種方式)

[ -e /opt/shell/score12.txt ]

說明:中括號兩邊必須有空格啡氢,只能為[ -e /opt/shell/score.txt ]。

在判斷之后术裸,可以使用echo $?來顯示執(zhí)行結(jié)果是否為真倘是。也可以使用下方命令來顯示結(jié)果:

[ -e /opt/shell/score.txt ] && echo yes || echo no

執(zhí)行結(jié)果如下圖所示:

前面的文章中我們說過這種命令格式,當?shù)谝粋€命令執(zhí)行成功的時候會打印yes袭艺,否則會打印no搀崭。

3、按照文件權(quán)限進行判斷

測試選項 作用
-r 文件 判斷該文件是否存在猾编,并且是否該文件擁有讀權(quán)限(有讀權(quán)限為真)
-w 文件 判斷該文件是否存在瘤睹,并且是否該文件擁有寫權(quán)限(有寫權(quán)限為真)
-x 文件 判斷該文件是否存在,并且是否該文件擁有執(zhí)行權(quán)限(有執(zhí)行權(quán)限為真)
-u 文件 判斷該文件是否存在答倡,并且是否該文件擁有SUID權(quán)限(有SUID權(quán)限為真)
-g 文件 判斷該文件是否存在轰传,并且是否該文件擁有SGID權(quán)限(有SGID權(quán)限為真)
-k 文件 判斷該文件是否存在,并且是否該文件擁有SBit權(quán)限(有SBit權(quán)限為真)
3.1瘪撇、查看文件是否有些權(quán)限

查看文件score.txt的權(quán)限获茬,結(jié)果如下圖所示:

文件權(quán)限為-rw-r--r--;

判斷文件是否有寫權(quán)限倔既,執(zhí)行命令:

[ -w score.txt ] && echo yes || echo no

此方式雖然能夠判斷權(quán)限恕曲,但是不夠精確。因為系統(tǒng)不會區(qū)分權(quán)限的所有者叉存,比如判斷是否有寫權(quán)限-w码俩,只要所有者度帮、所屬組歼捏、其他人中有一個有寫權(quán)限,就會返回yes笨篷。

4瞳秽、兩個文件之間進行比較

測試選項 作用
文件1 -nt 文件2 判斷文件1的修改時間是否比文件2的新(如果新則為真)
文件1 -ot 文件2 判斷文件1的修改時間是否比文件2的舊(如果舊則為真)
文件1 -ef 文件2 判斷文件1是否和文件2的i節(jié)點號一致,可以理解為兩個文件是否為同一個文件率翅。這個判斷用于判斷硬鏈接是很好的方法练俐。
4.1、創(chuàng)建一個硬鏈接
ln /root/student.txt /tmp/stu.txt

執(zhí)行命令判斷兩個文件是否是硬鏈接:

[ /opt/shell/score.txt -ef /tmp/socre.txt ] && echo yes || echo no

5冕臭、兩個整數(shù)之間比較

測試選項 作用
整數(shù)1 -eq 整數(shù) 2 判斷整數(shù)1是否和整數(shù)2相等(相等為真)
整數(shù)1 -ne 整數(shù) 2 判斷整數(shù)1是否和整數(shù)2不相等(不相等位置)
整數(shù)1 -gt 整數(shù)2 判斷整數(shù)1是否大于整數(shù)2(大于為真)
整數(shù)1 -lt 整數(shù)2 判斷整數(shù)1是否小于整數(shù)2(小于位置)
整數(shù)1 -ge 整數(shù)2 判斷整數(shù)1是否大于等于整數(shù)2(大于等于為真)
整數(shù)1 -le 整數(shù)2 判斷整數(shù)1是否小于等于整數(shù)2(小于等于為真)
5.1腺晾、判斷23是否大于等于22

執(zhí)行命令:

[ 23 -ge 22 ] && echo yes || echo no

命令執(zhí)行結(jié)果:

5.2燕锥、判斷23是否小于等于22

執(zhí)行命令:

[ 23 -le 22 ] && echo yes || echo no

命令執(zhí)行結(jié)果:

6、字符串的判斷

測試選項 作用
-z 字符串 判斷字符串是否為空(為空返回真)
-n 字符串 判斷字符串是否為非空(非空返回真)
字串1 == 字串2 判斷字符串1是否和字符串2相等(相等返回真)
字串1 != 字串2 判斷字符串1是否和字符串2不相等(不相等返回真)
6.1悯蝉、判斷變量是否存在

執(zhí)行命令归形,判斷是否存在username:

[ -z "$username" ] && echo yes || echo no

執(zhí)行結(jié)果如下圖所示:

由于此時不存在username,為空鼻由,所以返回yes暇榴。

給username變量賦值

username=zhoujielun

再次執(zhí)行命令結(jié)果如下圖所示:

6.2、判斷變量是否相等

定義變量x1=11蕉世,x2=22蔼紧,判斷x1是否等于x2,執(zhí)行命令:

[ "$x1" == "$x2" ] && echo yes || echo no

命令執(zhí)行結(jié)果如下圖所示:

7狠轻、多重條件判斷

測試選項 作用
判斷1 -a 判斷2 邏輯與奸例,判斷1和判斷2都成立,最終的結(jié)果才為真
判斷1 -o 判斷2 邏輯或向楼,判斷1和判斷2有一個成立哩至,最終的結(jié)果就為真
!判斷 邏輯非,使原始的判斷式取反

執(zhí)行命令蜜自,判斷變量x2是否有值菩貌,同時判斷變量x2的值是否大于23:

[ -n "$x2" -a "$x2" -gt 23 ] && echo yes || echo no

當沒有變量x2的時候,執(zhí)行結(jié)果為no重荠。定義x2=123以后箭阶,執(zhí)行結(jié)果為yes。為x2賦值12戈鲁,執(zhí)行結(jié)果為no仇参。如下圖所示:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者婆殿。
  • 序言:七十年代末诈乒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子婆芦,更是在濱河造成了極大的恐慌怕磨,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件消约,死亡現(xiàn)場離奇詭異肠鲫,居然都是意外死亡,警方通過查閱死者的電腦和手機或粮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門导饲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事渣锦∠醺冢” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵袋毙,是天一觀的道長辈讶。 經(jīng)常有香客問我,道長娄猫,這世上最難降的妖魔是什么贱除? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮媳溺,結(jié)果婚禮上月幌,老公的妹妹穿的比我還像新娘。我一直安慰自己悬蔽,他們只是感情好扯躺,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝎困,像睡著了一般录语。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禾乘,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天澎埠,我揣著相機與錄音,去河邊找鬼始藕。 笑死蒲稳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的伍派。 我是一名探鬼主播江耀,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诉植!你這毒婦竟也來了祥国?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤晾腔,失蹤者是張志新(化名)和其女友劉穎舌稀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體建车,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡扩借,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年椒惨,在試婚紗的時候發(fā)現(xiàn)自己被綠了缤至。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖领斥,靈堂內(nèi)的尸體忽然破棺而出嫉到,到底是詐尸還是另有隱情,我是刑警寧澤月洛,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布何恶,位于F島的核電站,受9級特大地震影響嚼黔,放射性物質(zhì)發(fā)生泄漏细层。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一唬涧、第九天 我趴在偏房一處隱蔽的房頂上張望疫赎。 院中可真熱鬧,春花似錦碎节、人聲如沸捧搞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胎撇。三九已至,卻和暖如春殖氏,著一層夾襖步出監(jiān)牢的瞬間晚树,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工雅采, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留题涨,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓总滩,卻偏偏與公主長得像纲堵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闰渔,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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