参数 | 说明 |
---|---|
-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