shell中的文件目录属性判断

蓝咒 提交于 2019-12-04 05:55:57

在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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!