linux中shell下test [ ] 条件表达式使用详解
shell是一个非常强在的编码环境了,我们可以使用shell编程来做很多的事情了,下面我们来学习shell条件表达式使用方法.
test 条件表达式说明,文件符号:
- [root@LAMPtest]#helptest
- test:test[expr]
- Evaluateconditionalexpression.
- Exitswithastatusof0(true)or1(false)dependingon
- theevaluationofEXPR.Expressionsmaybeunaryorbinary.Unary
- expressionsareoftenusedtoexaminethestatusofafile.There
- arestringoperatorsaswell,andnumericcomparisonoperators.
- Fileoperators:
- -aFILETrueiffileexists.
- -bFILETrueiffileisblockspecial.
- -cFILETrueiffileischaracterspecial.
- -dFILETrueiffileisadirectory.
- -eFILETrueiffileexists.
- -fFILETrueiffileexistsandisaregularfile.
- -gFILETrueiffileisset-group-id.
- -hFILETrueiffileisasymboliclink.
- -LFILETrueiffileisasymboliclink.
- -kFILETrueiffilehasits`sticky'bitset.
- -pFILETrueiffileisanamedpipe.
- -rFILETrueiffileisreadablebyyou.
- -sFILETrueiffileexistsandisnotempty.
- -SFILETrueiffileisasocket.
- -tFDTrueifFDisopenedonaterminal.
- -uFILETrueifthefileisset-user-id.
- -wFILETrueifthefileiswritablebyyou.
- -xFILETrueifthefileisexecutablebyyou.
- -OFILETrueifthefileiseffectivelyownedbyyou.
- -GFILETrueifthefileiseffectivelyownedbyyourgroup.
- -NFILETrueifthefilehasbeenmodifiedsinceitwaslastread.
- FILE1-ntFILE2Trueiffile1isnewerthanfile2(accordingto
- modificationdate).
- FILE1-otFILE2Trueiffile1isolderthanfile2.
- FILE1-efFILE2Trueiffile1isahardlinktofile2.
- Stringoperators:
- -zSTRINGTrueifstringisempty.
- -nSTRING
- STRINGTrueifstringisnotempty.
- STRING1=STRING2
- Trueifthestringsareequal.
- STRING1!=STRING2
- Trueifthestringsarenotequal.
- STRING1<STRING2
- TrueifSTRING1sortsbeforeSTRING2lexicographically.
- STRING1>STRING2
- TrueifSTRING1sortsafterSTRING2lexicographically.
- Otheroperators:
- -oOPTIONTrueiftheshelloptionOPTIONisenabled.
- !EXPRTrueifexprisfalse.
- EXPR1-aEXPR2Trueifbothexpr1ANDexpr2aretrue.
- EXPR1-oEXPR2Trueifeitherexpr1ORexpr2istrue.
- arg1OParg2Arithmetictests.OPisoneof-eq,-ne,
- -lt,-le,-gt,or-ge.
- ArithmeticbinaryoperatorsreturntrueifARG1isequal,not-equal,
- less-than,less-than-or-equal,greater-than,orgreater-than-or-equal--phpfensi.com
- thanARG2.
- ExitStatus:
- ReturnssuccessifEXPRevaluatestotrue;failsifEXPRevaluatesto
- falseoraninvalidargumentisgiven.
-a file如果 file 存在则为真.
-b file 如果 file 存在且为块设备则为真。
-c file 如果 file 存在且为字符设备则为真。
-d file 如果 file 存在且是一个目录则为真。
-e file 如果 file 存在则为真。
-f file 如果 file 存在且为普通文件则为真。
-g file 如果 file 存在且是设置组ID的 (sgid) 则为真。
-h file 如果 file 存在且为符号链接则为真。
-k file 如果 file 存在且设置了 ‘‘sticky’’ 位 (粘滞位) 则为真。
-p file 如果 file 存在且是一个命名管道 (FIFO) 则为真。
-r file 如果 file 存在且可读则为真。
-s file 如果 file 存在且大小大于零则为真。
-t fd 如果文件描述符 fd 是打开的且对应一个终端则为真。
-u file 如果 file 存在且是设置用户ID的 (suid) 则为真。
-w file 如果 file 存在且可写则为真。
-x file 如果 file 存在且可执行则为真。
-O file 如果 file 存在且为有效用户ID所拥有则为真。
-G file 如果 file 存在且为有效组ID所拥有则为真。
-L file 如果 file 存在且为符号链接则为真。
-S file 如果 file 存在且为套接字则为真。
-N file 如果 file 存在且上次读取后被修改过则为真。
file1 -nt file2 如果 file1 比 file2 要新(根据修改日期),或者如果 file1 存在而 file2 不存在,则为真.
file1 -ot file2 如果 file1 比 file2 更旧,或者如果 file1 不存在而 file2 存在,则为真。
file1 -ef file2 如果 file1 和 file2 指的是相同的设备和 inode 号则为真。
-o optname 如果启用了 shell 选项 optname 则为真。参见下面对内建命令 set 的 -o 选项的描述中的选项列表。
-z string 如果 string 的长度为 0 则为真。
-n string string 如果 string 的长度非 0 则为真。
string1 == string2 如果字符串相等则为真。= 可以用于使用 == 的场合来兼容 POSIX 规范。
string1 != string2 如果字符串不相等则为真。
string1 < string2 如果 string1 在当前语言环境的字典顺序中排在 string2 之前则为真。
string1 > string2 如果 string1 在当前语言环境的字典顺序中排在 string2 之后则为真。
arg1 OP arg2 OP 是-eq,-ne,-lt,-le,-gt,或 -ge 之一,这些算术二进制操作返回真,如果 arg1 与 arg2 分别是相等,不等,小于,小于或等于,大于,大于或等于关系,Arg1 和 arg2 可以是正/负整数。
shell 条件表达式[ ]说明:
equal:在[]中使用-eq、在(())[[]]中使用==;
not-equal:在[]中使用-ne、在(())[[]]中使用!=;
less-than:在[]中使用-lt、在(())[[]]中使用<;
less-than-or-equal:在[]中使用-le、在(())[[]]中使用<=;
greater-than:在[]中使用-gt、在(())[[]]中使用>;
greater-than-or-equal:在[]中使用-ge、在(())[[]]中使用>=;
逻辑操作符:
and:在[]中使用-a、在(())[[]]中使用&&;
or:在[]中使用-o、在(())[[]]中使用||;
!:在[]中使用!、在(())[[]]中使用!;
试验:=、!=测试
- [root@LAMPscript]#[2==2]&&echoright||echowrong#如果2=2,则打印right,否则wrong
- right
- [root@LAMPscript]#[2!=2]&&echoright||echowrong#如果2≠2,则打印right,否则wrong
- wrong
- [root@LAMPscript]#[2==3]&&echoright||echowrong#如果2=3,则打印right,否则wrong
- wrong
- [root@LAMPscript]#[2-eq2]&&echoright||echowrong
- right
- [root@LAMPscript]#[2-ne2]&&echoright||echowrong
- wrong
- [root@LAMPscript]#[2-eq3]&&echoright||echowrong
- wrong
- [root@LAMPscript]#[[2==2]]&&echoright||echowrong
- right
- [root@LAMPscript]#[[2!=2]]&&echoright||echowrong
- wrong
- [root@LAMPscript]#[[2==3]]&&echoright||echowrong
- wrong
- 试验:<、>测试
- [root@LAMPscript]#[2-lt3]&&echoright||echowrong
- right
- [root@LAMPscript]#[2-gt3]&&echoright||echowrong
- wrong
- [root@LAMPscript]#[[2<3]]&&echoright||echowrong
- right
- [root@LAMPscript]#[[2>3]]&&echoright||echowrong
- wrong
- ########################特殊备注########################
- [root@LAMPscript]#[2<3]&&echoright||echowrong
- right
- [root@LAMPscript]#[2>3]&&echoright||echowrong
- right
- [root@LAMPscript]#[2\<3]&&echoright||echowrong
- right
- [root@LAMPscript]#[2\>3]&&echoright||echowrong
- wrong
- ########################特殊备注########################
- 试验:<=、>=测试
- [root@LAMPscript]#[2-le3]&&echoright||echowrong
- right
- [root@LAMPscript]#[2-ge3]&&echoright||echowrong
- wrong
- [root@LAMPscript]#[[2-le3]]&&echoright||echowrong
- right
- [root@LAMPscript]#[[2-ge3]]&&echoright||echowrong
- wrong
- [root@LAMPscript]#[2<=3]&&echoright||echowrong
- -bash:[:2:unaryoperatorexpected
- wrong
- [root@LAMPscript]#[2>=3]&&echoright||echowrong
- -bash:[:2:unaryoperatorexpected
- wrong
- [root@LAMPscript]#[[2\<=3]]&&echoright||echowrong
- -bash:conditionalbinaryoperatorexpected
- -bash:syntaxerrornear`\<='
- [root@LAMPscript]#[[2<=3]]&&echoright||echowrong
- -bash:syntaxerrorinconditionalexpression
- -bash:syntaxerrornear`3'
- [root@LAMPscript]#[[2>=3]]&&echoright||echowrong
- -bash:syntaxerrorinconditionalexpression
- -bash:syntaxerrornear`3'
热门评论