If条件中-f和-s选项有什么区别?

use*_*521 1 unix if-statement

If条件中的-f-sOption 之间的区别是什么

主要是它们在功能上有何不同?

我知道这些google的意思但想知道它的实际用途.

fed*_*qui 7

来自man test:

-f FILE
          FILE exists and is a regular file

-s FILE
          FILE exists and has a size greater than zero
Run Code Online (Sandbox Code Playgroud)

让我们从头开始创建一个文件并查看它.

$ touch b
Run Code Online (Sandbox Code Playgroud)

该文件是否存在?

$ [ -f "b" ] && echo "file exists"
file exists                          # yes!!!!
Run Code Online (Sandbox Code Playgroud)

文件的大小是否大于零?

$ [ -s "b" ] && echo "file exists and is greater than zero"
$                                    # no!!!!
Run Code Online (Sandbox Code Playgroud)

因此if-elif-else,检查文件是否存在的良好条件可能是:

if [ -s "$file" ]; then
   echo "exists and it is not empty"
elif [ -f "$file" ]; then
   echo "at least exists"
else
   echo "does not exist"
fi
Run Code Online (Sandbox Code Playgroud)