shell中的条件判断if和测试

(一)条件判断 if 中-z 到 -d 的意思

  [ -a file ] 若file存在,则为真。

  [ -b file ] 若file存在且是一个特殊文件,则为真。

  [ -c file ] 若file存在且是一个特殊文件,则为真。

  [ -d file ] 若file存在且是一个目录,则为真。

  [ -e file ] 若file存在,则为真。

  [ -f file ] 若file存在且是一个普通文件,则为真。

  [ -g file ] 若file存在且已经设置了SGID,则为真。

  [ -h file ] 若file存在且是一个符号连接,则为真。

  [ -k file ] 若file存在且已经设置了粘制位,则为真。

  [ -p file ] 若file存在且是一个管道,则为真。

  [ -r file ] 若file存在且是可读的,则为真。

  [ -s file ] 若file存在且大小不为0,则为真。

  [ -t FD ] 若文件描述符FD打开且指向一个终端,则为真。

  [ -u file ] 若file存在且设置了SUID,则为真。

  [ -w file ] 若file存在且是可写的,则为真。

  [ -x file ] 若file存在且是可执行的,则为真。

  [ -O file ] 若file存在且是有效用户ID,则为真。

  [ -G file ] 若file存在且是有效用户组,则为真。

  [ -L file ] 若file存在且是一个符号连接,则为真。

  [ -S file ] 若file存在且是一个套接字,则为真。

(二)条件测试

  使用 “test” 或 “[ ]” 命令

  if test -f file.c 

  then ...

  fi 

  或者:

  if [ -f file.c ]

  then ...

  fi

  注意:在使用方括号”[]”来测试条件时,方括号要与测试条件之间留出空格

  

  测试条件分类:

    字符串比较类算术比较类与文件相关的条件测试类

  1.字符串比较类:

  string1 = string2 如果两字符串相同,则结果为真

  string1 != string2 如果两字符串不相同,则结果为真

  -n string 如果字符串不是空,则结果为真

  -z string 如果字符串是空,则结果为真

  注意在比较相等或不等的时侯,=/!=的两边要与比较的两字符串要有空格符相隔开

  2.算术比较类:

expression1 –eq expression2 #如果两个表达式相等,则结果为真
expression1 –ne expression2 #如果两个表达式不等,则结果为真
expression1 –gt expression2 #如果前一个表达式大于后一个表达式,则结果为真
expression1 –ge expression2 #如果前一个表达式大于或等于后一个表达式,则结果为真
expression1 –lt expression2 #如果前一个表达式小于后一个表达式,则结果为真
expression1 –le expression2 #如果前一个表达式小于或等于后一个表达式,则结果为真
! expression #取表达式的非,即表达式为,则结果为真

  3.文件比较类:

[ FILE1 -nt FILE2 ] 如果 FILE2 比 FILE1 要老, or 如果 FILE1 exists and FILE2 does not则为真。

[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。

[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。