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 ='https://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