無論什麼程式設計語言都離不開條件判斷。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