参数说明
-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名如果文件存在且为字符型特殊文件则为真
-b 文件名如果文件存在且为块特殊文件则为真

实例演示:

cd /binif test -e ./bashthen
    echo '文件已存在!'else
    echo '文件不存在!'fi

输出结果:

文件已存在!

另外,Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。例如:

cd /binif test -e ./notFile -o -e ./bashthen
    echo '有一个文件存在!'else
    echo '两个文件都不存在'fi

输出结果:

有一个文件存在!



举几个例子:

a. 如果文件存在且为普通文件则为真

eg:

#判断/cisco是否存在且是否为文件,是的话就输出/cisco is a file

#不是的话,就输出/cisco是一个目录

vim 4.sh

if [ -f /cisco ]

then

        echo /cisco is a file

else

        echo /cisco is director

fi

实验下:

[root@wenwen ~]# touch /cisco

[root@wenwen ~]# ls

123   1.txt  3.sh  567.sql   sedWSS6gg              桌面

1.sh  2.sh   4.sh  prac3.py  求1,100之间的质数.sh

[root@wenwen ~]# ./4.sh 

/cisco is a file



b. 如果文件存在且为目录则为真:

#判断/cisco/31是否存在且为目录,存在且为目录的话,就输出"ok",不存在或者/cisco/31不是目录的话,输出1,另外创建该目录 /cisco/31/

vim 3.sh

if [ -d /cisco/31/ ]

then

        echo ok

else

        echo 1

        rm -rf /cisco/31

        mkdir -p /cisco/31

fi

实验过程,在/cisco下创建文件名为31的文件:

[root@wenwen ~]# cd /cisco

[root@wenwen cisco]# ls

[root@wenwen cisco]# touch 31

[root@wenwen cisco]# cd

[root@wenwen ~]# ./3.sh

1