Strange behaviour of -d conditional expression
我的kornshell(ksh)手册说,如果文件存在并且是一个目录,那么
它工作得很好,你的期望是错误的。在shell中,0返回值为true,而非零返回值为false。
1 2 3 4 | $ true ; echo $? 0 $ false ; echo $? 1 |
ksh文件操作员如果:
- -存在文件
- -文件是一个目录
- -f文件是常规文件(即,不是目录或其他特殊类型的文件)
- -r您对文件具有读取权限
- -S文件存在且不为空
- -W您对文件具有写权限
- -x您对文件具有执行权限,如果是目录,则具有目录搜索权限。
- -o归档您自己的文件
- -G文件您的组ID与文件的组ID相同
ksh文件操作员功能.ksh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #***Function to demo ksh file Operators.***# fileOperators(){ echo"Entering fileOperators function." if [[ ! -a $1 ]]; then print"file $1 does not exist." return 1 fi if [[ -d $1 ]]; then print -n"$1 is a directory that you may" if [[ ! -x $1 ]]; then print -n"not" fi print"search." elif [[ -f $1 ]]; then print"$1 is a regular file." else print"$1 is a special type of file." fi if [[ -O $1 ]]; then print 'you own the file.' else print 'you do not own the file.' fi if [[ -r $1 ]]; then print 'you have read permission on the file.' fi if [[ -w $1 ]]; then print 'you have write permission on the file.' fi if [[ -x $1 && ! -d $1 ]]; then print 'you have execute permission on the file.' fi echo"Exiting fileOperators function." } |
参考文献:O'Reilly,学习Kornhell第1卷