何时在 if 循环中使用 -f 或 -a 标签

何时在 if 循环中使用 -f 或 -a 标签

if我对 Bash 脚本语句中可以使用的两个标签感到困惑。

一个是-f,另一个是-a

他们的描述如下:

[ -f FILE ] True if FILE exists and is a regular file.
[ -a FILE ] True if FILE exists.

现在,当我在 shell 脚本中使用 if 条件时,我怎么知道应该使用哪个标签。比如我有一个脚本,它使用常规备份tar并创建一个文件,file-name.tar.gz那么我怎么知道哪个是常规文件呢?谢谢。

答案1

常规文件都是文本或数据文件,也可以是二进制文件。对于常规文件,输出ls -l如下:

-rw-rw-r-- 1 username group 74 Nov 27 16:03 mytext.txt

一般来说,常规文件 a-应该出现在第一个位置。在这种情况下if [ -f FILE ]是合适的。

非常规文件是设备、管道、套接字、tty 等。所有其他符合 drc 指出的“一切皆文件”理念的事物。您可以浏览Unix_file_types了解更多信息。

您可以验证ls -l一些类似的输出,

crw-rw---- 1 root tty 4, 1 Dec  9 13:41 /dev/tty1
brw-rw---- 1 root disk 1, 11 Dec  9 13:41 /dev/ram11

对于所有非常规文件,您应该使用if [ -a FILE ]

答案2

对于 tar 文件 - 以及基本上您创建的任何其他文件 --f都是正确的选择。

-a用于存储诸如设备节点、fifo 等特殊文件,根据 Unix 哲学一切皆文件以文件形式呈现在您的文件系统中。

相关内容