如何在Bash shell脚本中检查目录是否存在?
要检查目录是否存在:
if [ -d "$DIRECTORY" ]; then echo "$DIRECTORY does exist." fi
要检查目录是否不存在:
if [ ! -d "$DIRECTORY" ]; then echo "$DIRECTORY does not 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在另一个答案中解释。
如果变量包含空格或其他不寻常字符,可能会导致脚本失败。