linux条件测试的三种,shell编程之条件测试 | 旺旺知识库
一、條件測(cè)試語(yǔ)法:
test 測(cè)試內(nèi)容
[ 測(cè)試內(nèi)容?] ? ? ?##注意中括號(hào)與測(cè)試內(nèi)容間有空格
[[ 測(cè)試內(nèi)容?]]
(( 測(cè)試內(nèi)容?)) ? ##只能用于測(cè)試數(shù)值大小,后面詳解
前三種測(cè)試語(yǔ)法基本等同。
二、數(shù)值測(cè)試:
2.1 常見(jiàn)的數(shù)值測(cè)試:
int1 -eq int2 如果int1 等于int2,則返回真
int1 -ne int2 如果int1 不等于int2,則返回真
int1 -lt int2 如果int1 小于int2,則返回真
int1 -gt int2 如果int1 大于int2,則返回真
int1 -le int2 如果int1 小于等于int2,則返回真
int1 -ge int2如果int1 大于等于int2,則返回真
2.2 在(( ?))中測(cè)試
< 小于(在雙括號(hào)里使用) (("int1" < "int2")) ?等同于?[ int1 -lt?int2?]
[root@server1 ~]# (( "2" < "3" ))
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ 1 -lt 3 ]
[root@server1 ~]# echo $?
0
<= 小于等于 (在雙括號(hào)里使用) (("int1" <= "int2")) ? 等同于 [ int1 -ne int2?]
> 大于 (在雙括號(hào)里使用) (("int1" > "int2")) ?等同于 [?int1 -gt int2 ]
>= 大于等于(在雙括號(hào)里使用) (("int1" >= "int2")) 等同于 [ int1 -ge int2?]
注意:雙括號(hào)測(cè)試不能測(cè)試數(shù)值相等的情況,使用雙括號(hào)測(cè)試等于是會(huì)報(bào)如下錯(cuò)誤:
[root@server1 ~]# (( "2" = "3" ))
-bash: ((: 2 = 3 : attempted assignment to non-variable (error token is "= 3 ")
3、測(cè)試字符串:
-z string 字符串string 為空串(長(zhǎng)度為0)時(shí)返回真
-n string 字符串string 為非空串時(shí)返回真
str1 = str2 字符串str1 和字符串str2 相等時(shí)返回真
str1 == str2 同 =
str1 != str2 字符串str1 和字符串str2 不相等時(shí)返回真
str1 < str2 按字典順序排序,字符串str1 在字符串str2 之前,一般不會(huì)用到
str1 > str2 按字典順序排序,字符串str1 在字符串str2 之后,一般不會(huì)用到
測(cè)試示例:
[root@server1 ~]# A=str
[root@server1 ~]# B=str
[root@server1 ~]# [ $A = $B ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# B=Str
[root@server1 ~]# [ $A = $B ]
[root@server1 ~]# echo $?
1
[root@server1 ~]# [ -n $B ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ -z $B ]
[root@server1 ~]# echo $?
1
4、文件測(cè)試:
-b?FILE存在并且是塊文件時(shí)返回真;
-c?FILE存在并且是字符文件時(shí)返回真;
-e FILE 文件或目錄存在時(shí)返回真;
-f FILE 文件為普通文件時(shí)返回真;
-d FILE 指定路徑為目錄時(shí)返回真;
-r FILE 當(dāng)前用戶對(duì)指定文件有讀取權(quán)限時(shí)返回真;
-w FILE 當(dāng)前用戶對(duì)指定的目錄或文件存在并并可寫(xiě)時(shí)返回真;
-x FILE 當(dāng)前用戶對(duì)指定的文件或目錄存在并且可執(zhí)行時(shí)返回真;
-s FILE 指定文件存在并且文件大小大于0時(shí)返回真
-O FILE 存在并且屬于當(dāng)前進(jìn)程的有效用戶id 的用戶的用戶組時(shí)返回真
-G FILE 存在并且屬于當(dāng)前進(jìn)程的有效用戶id 的用戶的用戶組時(shí)返回真
FILE1 -nt FILE2 當(dāng)FILE1比FILE2新時(shí)返回真
FILE1 -ot FILE2 當(dāng)FILE1比FILE2舊時(shí)返回真
FILE1 -ef FILE2 當(dāng)FILE1和FILE2硬鏈接到同一個(gè)文件時(shí)返回真
測(cè)試示例:
[root@server1 ~]# [ -d /etc/sysconfig/network ]
[root@server1 ~]# echo $?
1
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts ]
[root@server1 ~]# echo $?
0
5、在測(cè)試中使用邏輯操作符:
5.1 單[]中的邏輯測(cè)試符
-a 邏輯與,操作符兩邊均為真,結(jié)果為真,否則為假
-o 邏輯或,操作符兩邊一邊為真,結(jié)果為真,否則為假
! 邏輯否,條件為假,結(jié)果為真
測(cè)試示例:
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -o -e /etc/fstabs ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -a -e /etc/fstabs ]
[root@server1 ~]# echo $?
1
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -a -e /etc/fstab ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -o -e /etc/fstabs ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ ! -e /etc/fstabs ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ -e /etc/fstabs ]
[root@server1 ~]# echo $?
1
##注意標(biāo)紅部分不一樣的地方
5.2 雙[[]]中的邏輯測(cè)試符:
&& 邏輯與,操作符兩邊均為真,結(jié)果為真,否則為假,功能上與 -a 相同
|| ?邏輯或,操作符兩邊一邊為真,結(jié)果為真,否則為假,功能上與 -o 相同
測(cè)試示例:
[root@server1 ~]# [ -b /dev/sdb -a -e /etc/fstab ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [[ -b /dev/sdb && -e /etc/fstab ]]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [[ -b /dev/sdb && -e /etc/fstabs ]]
[root@server1 ~]# echo $?
1
[root@server1 ~]# [[ -b /dev/sdb || -e /etc/fstabs ]]
[root@server1 ~]# echo $?
0
另外,測(cè)試還支持通配符,如:
[root@server1 ~]# [ -e /etc/in*t ]
[root@server1 ~]# echo $?
0
總結(jié)
以上是生活随笔為你收集整理的linux条件测试的三种,shell编程之条件测试 | 旺旺知识库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎样设置共享文件(怎样设置共享文件不能修
- 下一篇: linux wordpress伪静态,w