问题

在shell脚本中,可以使用什么命令来检查目录是否存在?

  最佳答案

要检查shell脚本中是否存在目录,您可以使用以下内容:

 if [ -d "$DIRECTORY" ]; then
  # Control will enter here if $DIRECTORY exists.
fi
 

或者检查目录是否不存在:

 if [ ! -d "$DIRECTORY" ]; then
  # Control will enter here if $DIRECTORY doesn't exist.
fi
 

但是,正如 Jon Ericson 所指出,如果您不考虑到目录的符号链接也会传递此检查,后续命令可能无法正常工作。 例如运行此:

 ln -s "$ACTUAL_DIR" "$SYMLINK"
if [ -d "$SYMLINK" ]; then 
  rmdir "$SYMLINK" 
fi
 

将生成错误消息:

 rmdir: failed to remove `symlink': Not a directory
 

因此,如果后续命令期望目录,则可能需要对符号链接进行不同的处理:

 if [ -d "$LINK_OR_DIR" ]; then 
  if [ -L "$LINK_OR_DIR" ]; then
    # It is a symlink!
    # Symbolic link specific commands go here.
    rm "$LINK_OR_DIR"
  else
    # It's a directory!
    # Directory command goes here.
    rmdir "$LINK_OR_DIR"
  fi
fi
 

特别注意用于包装变量的双引号,原因是8jean 在另一个答案中解释了这一点。

如果变量包含空格或其他异常字符,它可能会导致脚本失败。

  相同标签的其他问题

shellunixposix