回答

收藏

如何检查 Bash shell 脚本中是否存在目录?

技术问答 技术问答 559 人阅读 | 0 人回复 | 2023-09-11

在 Bash shell 脚本中可以用什么命令来检查目录是否存在?( {% |" x/ T0 e! b
                                                               
' s- W% W8 i: m/ ]6 h" V* E. A    解决方案:                                                                4 }( E) U* q! o! K+ i
                                                                要检查 shell 脚本中是否有目录可以使用以下命令:
8 m$ C% d( \) n* g# e; Vif [ -d "$DIRECTORY" ]; then  # Control will enter here if $DIRECTORY exists.fi或检查目录是否不存在:& O, ^, x! c0 h1 I. V: L
if [ ! -d "$DIRECTORY" ]; then  # Control will enter here if $DIRECTORY doesn't exist.fi但是,正如Jon Ericson如果您不考虑目录的符号链接也将通过此检查,则后续命令可能无法按预期工作。例如,操作:
2 w% S( i0 W. o: iln -s "$ACTUAL_DIR" "$SYMLINK"if [ -d "$SYMLINK" ]; then   rmdir "$SYMLINK" fi产生错误信息:
# K7 k! w9 B- ]  hrmdir: failed to remove `symlink’: Not a directory
1 X" j6 {% \1 j# O3 h因此,如果后续命令需要目录,可能需要区分符号链接:if [ -d “$LINK_OR_DIR” ]; then 7 T6 E1 D/ t- G' l, O# v0 i- n
        if [ -L “$LINK_OR_DIR” ]; then' B5 v6 X3 n9 }
                # It is a symlink!& Q- H$ D- y: R3 X- H
                # Symbolic link specific commands go here.
* l+ ?/ F& U6 x                rm “$LINK_OR_DIR”- `& |- Y+ M+ p# Q
        else
7 e% G) _; z& B- |( _; e                # It’s a directory!, A$ q. ~$ O4 t# Q/ F# x
                # Directory command goes here.8 e& t( u1 s) h' s, h
                rmdir “$LINK_OR_DIR”
! ^8 E# w* o3 w* ]  K        fi2 _5 `7 i7 a5 a+ `8 [! {& y
fi
) z- B1 k3 T+ \$ u( A9 M" }```0 r# \9 X% d6 p7 D
请特别注意包装变量的双引号。jean在另一个答案中解释了原因。0 V9 P3 `" H) \. y0 L4 S
如果变量包含空格或其他异常字符,则可能会导致脚本失败。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则