bash知识点:文件测试(测试文件是否存在,文件是某种类型)

单目测试-e file:测试文件是是否存在

-a file:测试文件是是否存在

-f file:测试是否为普通文件,是为真,否则为假

-d file:测试是否为目录文件,是为真,否则为假

-b file:测试是否存在,并且是否是块设备文件

-c file:测试是否存在,并且是否是字符设备文件

-h file:测试是否存在,并且是否是符号链接文件

-p file:测试是否存在,并且是否是管道文件

-r file:测试是否存在,并且当前用户是否有读取权限

-w file:测试是否存在,并且当前用户是否有写权限

-x file:测试是否存在,并且当前用户是否有执行权限

双目测试:

file1 -nt file2:测试file1是否比file2新一些。




例1:如果/tmp/hellodir不存在则创建。

#!/bin/bash

fileName=/tmp/hellodir

if [ -e $fileName ];then

mkdir $fileName

fi


例2:下载一个文件,如果which wget不存在,则退出5,如果不可执行which wget,则退出6


#!/bin/bash

url ='http://s2.51cto.com/wyfs02/M01/48/35/wKiom1QGaT2yybbeAAGp1WmlJ7k673.jpg'

which wget &> /dev/null || exit 5

downloader=`which wget`

[ -x $downloader ] || exit 6

$downloader $url


例3:写一个脚本,完成如下任务

1、分别复制/var/log下的文件到/tmp/logs/中

2、复制目录是,才使用cp -r

3、复制文件时,使用 cp

4、复制链接文件,使用cp -d

5、其他类型,使用cp -a

#!/bin/bash


targetDir='/tmp/logs'


[ -d $targetDir ] || mkdir $targetDir


for fileName in /var/log/*; do

   if [ -d $fileName ];then

copyCommand='cp -r'

   elif [ -f $fileName ];then

copyCommand='cp'

   elif [ -h $fileName ];then

copyCommand='cp -d'

    else 

copyCommand='cp -a'

    fi

$copyCommand $fileName $targetDir

done