shell中的文件目录属性判断

在linux中,我们经常会跟文件目录打交道,这就涉及到判断这个文件或目录是不是空、是否可写等情况

  • [ -f file ]判断是否是普通文件,且存在
[root@lijie-01 ~]# cat file1.sh
#!/bin/bash
f=/root/lijie.txt
if [ -f $f ]
then 
  echo $f exist
else
  touch $f   
fi
[root@lijie-01 ~]#

然后我们来查看执行过程
输入图片说明

  • [ -d file ] 判断是否是目录,且存在
[root@lijie-01 ~]# cat !$
cat file2.sh
#!/bin/bash
f=/root/lijie.txt
if [ -d $f ]
then 
  echo $f exist
else
  touch $f   //注意touch即可创建文件也可创建目录,如果文件或目录存在,touch就会修改文件或目录的三个time:  mtime ctime atime
fi
[root@lijie-01 ~]#

查看执行过程
输入图片说明

  • [ -e file ] 判断文件或目录是否存在
  • [ -r file ] 判断文件是否可读
[root@lijie-01 ~]# cat !$
cat file2.sh
#!/bin/bash
f=/root/lijie.txt
if [ -r $f ]
then 
  echo $f readable
fi
[root@lijie-01 ~]#

执行过程如下
输入图片说明

  • [ -w file ] 判断文件是否可写
[root@lijie-01 ~]# cat file2.sh
#!/bin/bash
f=/root/lijie.txt
if [ -w $f ]
then 
  echo $f writeable
fi
[root@lijie-01 ~]#

执行过程如下
输入图片说明

  • [ -x file ] 判断文件是否可执行
[root@lijie-01 ~]# ll lijie.txt
-rw-r--r--. 1 root root 0 4月  19 06:14 lijie.txt
[root@lijie-01 ~]# cat file2.sh
#!/bin/bash
f=/root/lijie.txt
if [ -x $f ]
then 
  echo $f exeable
fi
[root@lijie-01 ~]#

执行过程如下
输入图片说明
上图中,由于我们没有给这个文件执行权限,也没有设置else语句,因此没有反馈任何结果
实际上,判断一个文件是否可读可写可执行,是基于当前用户来判断的,以下代码块为常用方法
判断一个文件是否存在,如果存在则删除这个文件

#!/bin/bash
f=/root/lijie.txt
# [ -f $f] && rm -f $f   //这种方式的效果等同于下面四行的效果
if [ -f $f ]
then
  rm -f $f
fi

判断一个文件是否存在,如果不存在则创建这个文件

#!/bin/bash  
f=/root/lijie.txt
# [ ! -f $f ] || touch $f   //这种方式的效果等同于下面四行的效果
if [ ! -f $f ]
then
  touch $f
fi

猜你喜欢

转载自my.oschina.net/u/3746774/blog/1797587
今日推荐