-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
在shell编程中,常常会用if来判断条件,从而控制程序的流程分支。if语句是非常简单,跟其他语言差不多,不过,在shell中,要注意一些细节是很有必要的。
在这里,不给出if的基本语法格式,网上搜索下,很多的。这里给出个简单的例子:
- #! /bin/sh -
- name=`basename $0 .sh`
- if [ $# -ne 2 -a $# -ne 3 ]; then
- echo "Usage: $name value1 value2"
- echo " $name value1 value2 value3 "
- exit 1
- fi
- if [ $# -eq 2 ]; then
- echo "two args: $1, $2"
- else
- echo "three args: $1 $2 $3"
- fi
- if [ $# -eq 2 ]; then
- if [ $1 -gt $2 ]; then
- echo " $1 > $2"
- elif [ $1 -lt $2 ]; then
- echo " $1 < $2 "
- else
- echo "$1 = $2"
- fi
- else
- if [ $1 -ge $2 -a $1 -ge $3 ]; then
- echo "$1 >=$2 , $1 >=$3"
- elif [ $1 -ge $2 -a $1 -lt $3 ]; then
- echo "$1 >=$2 ,$1 < $3"
- elif [ $1 -lt $2 -a $1 -ge $3 ]; then
- echo "$1 < $2, $1 >= $3"
- else
- echo "$1 < $2, $1 < $3"
- fi
- fi
- exit 0
将上面的内容保存为文件保存为if.sh,并给文件赋予可执行权限。然后通过调用该shell。该shell脚本主要是通过if语句,对不同的参数进行判断输出。上面的脚本基本囊括了常用的if then if else if elif 。if语句中,主要需要注意以下几点:
1、if 与[ 之间必须有空格
2、[ ]与判断条件之间也必须有空格
3、]与; 之间不能有空格
Shell脚本比较运算符及逻辑运算符小结
1、数值
格式:
test "num1" opr "num2"
[ "num1" opr "num2" ]
opr 取值:
相等:-eq
不等:-ne
大于:-gt
小于:-lt 【l是字母L的小写】
小于等于:-le
大于等于:-ge
2、字符串
格式:
[ str1 opr str2]
[ opr str ]
opr取值:
相等:=
不等:!=
空串:-z
非空串:-n
3、文件
格式:
[ opr file ]
opr取值:
目录: -d
文件: -f
链接: -L
可读: -r
可写: -w
可执行: -x
文件非空: -s
4、逻辑运算符
逻辑与: -a 格式: [ condition1 -a condition2 ]
逻辑或: -o 格式: [ condition1 -o condition2 ]
逻辑否: ! 格式: [ ! condition ]