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脚本中对字符串、数字、文件与复杂逻辑判断的使用

上一篇:Quartz.net开源作业调度框架使用详解


下一篇:The Linux Command Line——19. 归档和备份