“if”语句的测试-s

时间:2014-10-18 11:18:00

标签: bash

我有一个问题,如果有人知道答案,我会很感激。 好的,到了这一点。在我的一个脚本中,我有以下表达式,我不清楚表格手册应该产生什么效果:

if ! [[ -s "$the_file_to_check" ]] ; then echo "file is zero sized and not exist | is exist and zero sized | not zero sized and not exist | not zero sized or not exist | not exist (obviously zero sized)" ; fi

存在单独的检查存在(-a键),为什么要添加另一个?

无论如何这个逻辑如何运作。

我在定义上有点迷失。

P.S。
我需要检查空虚但不存在。谢谢大家。

2 个答案:

答案 0 :(得分:1)

-s不仅检查文件是否存在,还检查它是否包含任何数据(即,如果文件的大小大于0字节)。这不仅仅是-a选项(实际上是-e的同义词),它只测试文件是否存在。

touch foo
[[ -a foo ]] && echo "File foo exists"
[[ -s foo ]] || echo "File foo exists, but is size 0 bytes"

(我想知道-a的基本原理是什么,因为我不知道它与-e有什么不同。)

答案 1 :(得分:0)

如果文件不存在或文件大小为零,则此if命令只打印字符串file is zero sized and not exist | is exist and zero sized | not exist (obviously zero sized)

如果您希望if命令仅检查零大小的文件而不是文件存在,那么您可以执行以下操作:

if [[ $(du -h "$the_file_to_check" |cut -f 1) == "0" ]] ;then echo "file is zero sized" ; fi

但如果文件不存在,则此if语句将发布错误。确保仅在文件存在时执行此操作。