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仇参。如下圖所示: