Shell脚本中对字符串、数字、文件与复杂逻辑判断的使用
作者:互联网
1、字符串的比较判断
=:第一个字符串与第二个字符串相同。
!=:第一个字符串与第二个字符串不相同,其中 “ !”表示取反。
-z:检查字符串是否为空,对于未定义或赋予空值的变量将是为空串
-n:检查字符串的长度,当串的长度大于0时为真(串非空)
2、数字的判断
-eq:第一个数等于(Equal)第二个数;
-ne:第一个数不等于(Not Equal)第二个数;
-gt:第一个数大于(Greater Than)第二个数;
-lt:第一个数小于(Lesser Than)第二个数;
-le:第一个数小于或等于(Lesser or Equal)第二个数;
-ge:第一个数大于或等于(Greater or Equal)第二个数;
3、文件的判断
-d:测试是否为目录(Directory);
-e:测试文件或目录是否存在(Exist);
-f:测试是否为文件(File);
-r:测试当前用户是否有权限读取(Read);
-w:测试当前用户是否有权限写入(Write);
-x:测试是否设置有可执行(Excute)权限;
-c:测试文件是否为字符特殊文件
-b:测试文件是否为块特殊文件
-s:测试文件大小是否为非0
-t:测试当文件描述符(默认为1)指定的设备是否为终端
4、复杂逻辑判断
!:表示“不”,只有当条件不成立时,整个测试命令返回的值才为0,即结果成立;
&&:表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为0,即结果成立,使用test命令测试时可以使用“-a”代替;
||:表示“或者”,只要前后两个条件有一个成立,整个测试命令返回的值即为0,即结果成立。使用test命令测试时可以使用“-o”代替;
比如:
if [ $USER = "oracle" ] || [ $USER = "mysql" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
备注:对文件的判断所使用到的相关参数整理
[ -a FILENAME ] 如果 FILENAME 存在则为真。
[ -b FILENAME ] 如果 FILENAME 存在且是一个块特殊文件则为真。
[ -c FILENAME ] 如果 FILENAME 存在且是一个字特殊文件则为真。
[ -d FILENAME ] 如果 FILENAME 存在且是一个目录则为真。
[ -e FILENAME ] 如果 FILENAME 存在则为真。
[ -f FILENAME ] 如果 FILENAME 存在且是一个普通文件则为真。
[ -g FILENAME ] 如果 FILENAME 存在且已经设置了SGID则为真。 [ -h FILENAME ] 如果 FILENAME 存在且是一个符号连接则为真。
[ -k FILENAME ] 如果 FILENAME 存在且已经设置了粘制位则为真。
[ -p FILENAME ] 如果 FILENAME 存在且是一个名字管道(F如果O)则为真。
[ -r FILENAME ] 如果 FILENAME 存在且是可读的则为真。
[ -s FILENAME ] 如果 FILENAME 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILENAME ] 如果 FILENAME 存在且设置了SUID (set user ID)则为真。
[ -w FILENAME ] 如果 FILENAME 如果 FILENAME 存在且是可写的则为真。
[ -x FILENAME ] 如果 FILENAME 存在且是可执行的则为真。
[ -O FILENAME ] 如果 FILENAME 存在且属有效用户ID则为真。
[ -G FILENAME ] 如果 FILENAME 存在且属有效用户组则为真。
[ -L FILENAME ] 如果 FILENAME 存在且是一个符号连接则为真。
[ -N FILENAME ] 如果 FILENAME 存在 and has been mod如果ied since it was last read则为真。
[ -S FILENAME ] 如果 FILENAME 存在且是一个套接字则为真。
[ FILENAME1 -nt FILENAME2 ] 如果 FILENAME1 has been changed more recently than FILENAME2, or 如果 FILENAME1 exists and FILENAME2 does not则为真。
[ FILENAME1 -ot FILENAME2 ] 如果 FILENAME1 比 FILENAME2 要老, 或者 FILENAME2 存在且 FILENAME1 不存在则为真。
[ FILENAME1 -ef FILENAME2 ] 如果 FILENAME1 和 FILENAME2 指向相同的设备和节点号则为真。
标签:逻辑,Shell,FILENAME1,存在,FILENAME2,FILENAME,如果,测试,字符串 来源: https://blog.51cto.com/u_8355320/2766303