在Linux中写脚本的时候,总免不了需要判断文件是否存在、文件内容是否为空等存在,而这些 *** 作都可以用 test 指令来实现,通过 man test 指令可以查看关于test指令的手册,手册中有如下说明:
在shell中通过test指令测试文件是否为空的示例脚本如下:
在shell中,test指令还有另外一种写法,上面的脚本和下面的脚本是等价的:
if [ -e filename ]then...存在做...
else
...不存在做...
fi
其他选项:
与文件存在与否的判断
-e 是否存在
-f 是否为普通文件
-d 是否为目录
-s 是否为空的文件
-p 是否为管道文件
-b 是否为块设备文件
-c 是否为字符设备文件
-L 是否为软链接
-S 是否Socket文件
与文件权限有关的判断
-r 是否有可读的权限
-w 是否有可写的权限
-x 是否有可执行权限
-u 是否有特权位
-g 是否有组特权位
-k 是否有t位,即粘贴位
两个文件的比较判断
-nt 比较file1比file2新
-ot 比较file1比file2旧
-ef 比较file1和file2是否为同一个文件,
一般用于判断硬链接
整数之间的大小判断
-eq 相等
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
字符串之间的判断
-z 是否为空字符串
-n 是否为非空字符串
str1 = str2 是否相等
str1 != str2 是否不等
多重条件判断
-a 两个条件同时满足,就为真,相当于and
-o 两个条件满足其一,就为真,相当于or
如果使用 [[ ]], 则多重判断可以使用:
[[ xxx &&xxx || xxx ]] 的形式.
search_dir=/tmp/testinclude_subdir=1
if [ $include_subdir -eq 1 ] then
n=$(find $search_dir -type f -exec sh -c 'printf "%s\n" "$1" kill "$PPID"' sh {} \ | grep -v "Terminated" | wc -l)
else
n=$(find $search_dir -maxdepth 1 -type f -exec sh -c 'printf "%s\n" "$1" kill "$PPID"' sh {} \ | grep -v "Terminated" | wc -l)
fi
结果 n 为 0 表示指定目录下面没有文件,否则有文件。如果不需要检查指定目录下的子目录,把 include_subdir 置为 0 即可。find 命令中较复杂的那部分是为了实现找到第一个文件时就停止查找,避免检查有大量文件的目录时影响性能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)