返回

shell脚本判断文件是否存在

电脑技巧

使用 Shell 脚本判断文件是否存在

在编写 Shell 脚本时,经常需要检查文件是否存在以确定后续操作。本文将深入探讨 Shell 脚本中判断文件存在的各种方法,并提供实际的示例代码。

通过判断条件判断文件是否存在

最基本的方法是使用判断条件来检查文件是否存在。语法如下:

if [ -e file_name ]; then
  # 文件存在
else
  # 文件不存在
fi

其中,file_name 是要检查的文件名。如果文件存在,则执行 then 块中的代码;如果文件不存在,则执行 else 块中的代码。

使用 file 命令获取文件类型

file 命令可以获取文件的类型。如果文件存在,file 命令会返回文件的类型;如果文件不存在,则会返回一个错误消息。语法如下:

file file_name

例如,如果存在一个名为 test.txt 的文件,运行 file test.txt 命令会返回以下输出:

test.txt: ASCII text

使用 stat 命令获取文件属性

stat 命令可以获取文件的属性。如果文件存在,stat 命令会返回文件的属性;如果文件不存在,则会返回一个错误消息。语法如下:

stat file_name

例如,如果存在一个名为 test.txt 的文件,运行 stat test.txt 命令会返回以下输出:

File: 'test.txt'
Size: 12
Blocks: 8
IO Block: 4096
Device: 8,0
Inode: 102658
Links: 1
Access: (0644/-rw-r--r--)
Uid: ( 1000/   user)
Gid: ( 1000/   user)
Access: 2022-08-11 17:25:28.395858518 +0800
Modify: 2022-08-11 17:25:28.395858518 +0800
Change: 2022-08-11 17:25:28.395858518 +0800
 Birth: -

结合多种方法判断文件是否存在

可以结合多种方法来判断文件是否存在。例如,可以使用以下脚本:

if [ -e file_name ] && file file_name | grep -q text; then
  # 文件存在并且是文本文件
else
  # 文件不存在或者不是文本文件
fi

这个脚本首先使用 -e 判断文件是否存在,然后使用 file 命令获取文件类型,最后使用 grep 命令检查文件类型是否为文本。如果文件存在并且是文本文件,则执行 then 块中的代码;否则,执行 else 块中的代码。

总结

本文介绍了 Shell 脚本中判断文件是否存在的多种方法。通过掌握这些方法,可以轻松地确定文件的可用性并根据需要执行相应的操作。

常见问题解答

  1. 如何检查文件是否可写?

    可以使用 -w 选项检查文件是否可写:

    if [ -w file_name ]; then
      # 文件可写
    else
      # 文件不可写
    fi
    
  2. 如何检查文件是否可执行?

    可以使用 -x 选项检查文件是否可执行:

    if [ -x file_name ]; then
      # 文件可执行
    else
      # 文件不可执行
    fi
    
  3. 如何检查文件是否是一个符号链接?

    可以使用 -L 选项检查文件是否是一个符号链接:

    if [ -L file_name ]; then
      # 文件是一个符号链接
    else
      # 文件不是一个符号链接
    fi
    
  4. 如何检查文件是否为空?

    可以使用 -s 选项检查文件是否为空:

    if [ -s file_name ]; then
      # 文件不为空
    else
      # 文件为空
    fi
    
  5. 如何检查文件是否是一个目录?

    可以使用 -d 选项检查文件是否是一个目录:

    if [ -d file_name ]; then
      # 文件是一个目录
    else
      # 文件不是一个目录
    fi