天天看點

shell條件判斷總結

無論什麼程式設計語言都離不開條件判斷。SHELL也不例外。shell有一下幾種條件判斷類别。

0x01、按照檔案類型進行判斷

選項

作用

-b 檔案

判斷該檔案是否存在,并且是否為塊裝置檔案(是塊裝置檔案為真)

-c 檔案

判斷該檔案是否存在,并且是否為字元裝置檔案(是字元裝置檔案為真)

-d 檔案

判斷該檔案是否存在,并且是否為目錄檔案(是目錄為真)

-e 檔案

判斷該檔案是否存在(存在為真)

-f 檔案

判斷該檔案是否存在,并且是否為普通檔案(是普通檔案為真)

- L 檔案

判斷該檔案是否存在,并且是否為符号連結檔案(是符号連結檔案為真)

-p 檔案

判斷該檔案是否存在,并且是否為管道檔案(是管道檔案為真)

-s 檔案

判斷該檔案是否存在,并且是否為非空(非空為真)

-S 檔案

判斷該檔案是否存在,并且是否為套接字檔案(是套接字檔案為真)

兩種判斷格式:

1、test指令的測試功能

test指令用于檢測系統檔案及其相關屬性,如檢查某檔案是否存在,檢查某檔案的權限等。

test -選項 檔案

2、使用判斷符号[ ]

[ -選項 檔案 ]  中括号中間内必須打空格,未傳回結果,可以檢視$?,檢視上一條指令是否正确,或者使用邏輯非邏輯與進行判斷

<a href="http://s2.51cto.com/wyfs02/M01/88/91/wKiom1f7mraCPLKwAAAg4SAQNrg533.png" target="_blank"></a>

0x02、按照檔案權限進行判斷

測試選項

-r 檔案

判斷該檔案是否存在,并且該檔案是否擁有讀權限(有讀權限為真)

-w 檔案

判斷該檔案是否存在,并且該檔案是否擁有寫權限(有寫權限為真)

-x 檔案

判斷該檔案是否存在,并且該檔案是否擁有執行權限(有執行權限為真)

-u 檔案

判斷該檔案是否存在,并且該檔案是否擁有SUID權限(有SUID權限為真)

-g 檔案

判斷該檔案是否存在,并且該檔案是否擁有SGID權限(有SGID權限為真)

-k 檔案

判斷該檔案是否存在,并且該檔案是否擁有SBit權限(有SBit權限為真)

自帶的判斷隻要有權限都會傳回正确,不會區分是所屬者、所屬組還是其他。

<a href="http://s2.51cto.com/wyfs02/M01/88/8D/wKioL1f7mtWRTGElAAAeJga8fu8520.png" target="_blank"></a>

0x03、兩個檔案之間進行比較

檔案1 -nt 檔案2

判斷檔案1的修改時間是否比檔案2的新(如果新則為真)

檔案1 -ot 檔案2

判斷檔案1的修改時間是否比檔案2的舊(如果舊則為真)

檔案1 -ef 檔案2

判斷檔案1是否和檔案2的inode号一緻,可以了解為兩個檔案是否為同一個檔案,這個判斷用于判斷硬連結是很好的方法。

可以看出/tmp下的canshu和/root/sh/canshu2的inode号是一緻的,canshu2是/root/sh/canshu2的軟連結。

<a href="http://s4.51cto.com/wyfs02/M01/88/8D/wKioL1f7mvCg3h0EAAA5NyrPlDE660.png" target="_blank"></a>

0x04、兩個整數之間比較

整數1 -eq 整數2

判斷整數1是否和整數2相等(相等為真)

整數1 -ne 整數2

判斷整數1是否和整數2不相等(不想等為真)

整數1 -gt 整數2

判斷整數1是否大于整數2(大于為真)

整數1-lt 整數2

判斷整數1是否小于整數2(小于為真)

整數1 -ge 整數2

判斷整數1是否大于等于整數2(大于等于為真)

整數1 -le 整數2

判斷整數1是否小于等于整數2(小于等于為真)

<a href="http://s1.51cto.com/wyfs02/M00/88/91/wKiom1f7mxCAUsTEAAAQK37qstk252.png" target="_blank"></a>

0x05、字元串的判斷

-z 字元串

判斷字元串是否為空(為空傳回真)

-n 字元串

判斷字元串是否為空(非空傳回為真)

字元串1 == 字元串2

判斷字元串1是否和字元串2相等(相等傳回為真)

字元串1 != 字元串2

判斷字元串1是否和字元串2不想等(不相等傳回真)

<a href="http://s5.51cto.com/wyfs02/M02/88/8D/wKioL1f7mzKw1VcbAAAUf4vyrgw386.png" target="_blank"></a>

<a href="http://s5.51cto.com/wyfs02/M01/88/91/wKiom1f7mzLyWrMXAAAWxDU6JLU371.png" target="_blank"></a>

0x06、多重條件判斷

判斷1 -a 判斷2

邏輯與,判斷1和判斷2都成立,最終的結果才為真

判斷1 -o 判斷2

邏輯或,判斷1和判斷2有一個成立,最終的結果就為真

! 判斷

邏輯非,使原始的判斷式取反

<a href="http://s3.51cto.com/wyfs02/M00/88/8D/wKioL1f7m0_yFOWcAAARMkAb4jE113.png" target="_blank"></a>

文法雖然簡單,但是在SHELL裡使用的時候,他的功能變得強大了。

本文轉自 wt7315 51CTO部落格,原文連結:http://blog.51cto.com/wt7315/1860466