Shell脚本IF条件判断和判断条件总结
前言:
无论什么编程语言都离不开条件判断。SHELL也不例外。
iflistthen dosomethinghere eliflistthen doanotherthinghere else dosomethingelsehere fi
EX1:
#!/bin/sh SYSTEM=`uname-s` #获取操作系统类型,我本地是linux if[$SYSTEM="Linux"];then #如果是linux的话打印linux字符串 echo"Linux" elif[$SYSTEM="FreeBSD"];then echo"FreeBSD" elif[$SYSTEM="Solaris"];then echo"Solaris" else echo"What?" fi #ifend
基本上和其他脚本语言一样。没有太大区别。不过值得注意的是。[]里面的条件判断。
1、字符串判断
str1=str2当两个串有相同内容、长度时为真
str1!=str2当串str1和str2不等时为真
-nstr1当串的长度大于0时为真(串非空)
-zstr1当串的长度为0时为真(空串)
str1 当串str1为非空时为真
2、数字的判断
int1-eqint2两数相等为真
int1-neint2两数不等为真
int1-gtint2int1大于int2为真
int1-geint2int1大于等于int2为真
int1-ltint2int1小于int2为真
int1-leint2int1小于等于int2为真
3、文件的判断
-rfile用户可读为真
-wfile用户可写为真
-xfile用户可执行为真
-ffile文件为正规文件为真
-dfile文件为目录为真
-cfile文件为字符特殊文件为真
-bfile文件为块特殊文件为真
-sfile文件大小非0时为真
-tfile当文件描述符(默认为1)指定的设备为终端时为真
4、复杂逻辑判断
-a与
-o或
!非
结尾
语法虽然简单,但是在SHELL里使用的时候,他的功能变得强大了。
=====================================================================
附表:
[-aFILE] 如果FILE存在则为真。
[-bFILE] 如果FILE存在且是一个块特殊文件则为真。
[-cFILE] 如果FILE存在且是一个字特殊文件则为真。
[-dFILE] 如果FILE存在且是一个目录则为真。
[-eFILE] 如果FILE存在则为真。
[-fFILE] 如果FILE存在且是一个普通文件则为真。
[-gFILE]如果FILE存在且已经设置了SGID则为真。[-hFILE] 如果FILE存在且是一个符号连接则为真。
[-kFILE] 如果FILE存在且已经设置了粘制位则为真。
[-pFILE] 如果FILE存在且是一个名字管道(F如果O)则为真。
[-rFILE] 如果FILE存在且是可读的则为真。
[-sFILE] 如果FILE存在且大小不为0则为真。
[-tFD] 如果文件描述符FD打开且指向一个终端则为真。
[-uFILE] 如果FILE存在且设置了SUID(setuserID)则为真。
[-wFILE] 如果FILE如果FILE存在且是可写的则为真。
[-xFILE] 如果FILE存在且是可执行的则为真。
[-OFILE] 如果FILE存在且属有效用户ID则为真。
[-GFILE] 如果FILE存在且属有效用户组则为真。
[-LFILE] 如果FILE存在且是一个符号连接则为真。
[-NFILE] 如果FILE存在andhasbeenmod如果iedsinceitwaslastread则为真。
[-SFILE] 如果FILE存在且是一个套接字则为真。
[FILE1-ntFILE2] 如果FILE1hasbeenchangedmorerecentlythanFILE2,or如果FILE1existsandFILE2doesnot则为真。
[FILE1-otFILE2] 如果FILE1比FILE2要老,或者FILE2存在且FILE1不存在则为真。
[FILE1-efFILE2] 如果FILE1和FILE2指向相同的设备和节点号则为真。
[-oOPTIONNAME] 如果shell选项“OPTIONNAME”开启则为真。
[-zSTRING] “STRING”的长度为零则为真。
[-nSTRING]or[STRING] “STRING”的长度为非零non-zero则为真。
[STRING1==STRING2] 如果2个字符串相同。“=”maybeusedinsteadof“==”forstrictPOSIXcompliance则为真。
[STRING1!=STRING2] 如果字符串不相等则为真。
[STRING1<STRING2] 如果“STRING1”sortsbefore“STRING2”lexicographicallyinthecurrentlocale则为真。
[STRING1>STRING2] 如果“STRING1”sortsafter“STRING2”lexicographicallyinthecurrentlocale则为真。
[ARG1OPARG2]“OP”isoneof-eq,-ne,-lt,-le,-gtor-ge.Thesearithmeticbinaryoperatorsreturntrueif“ARG1”isequalto,notequalto,lessthan,lessthanorequalto,greaterthan,orgreaterthanorequalto“ARG2”,respectively.“ARG1”and“ARG2”areintegers.