回答

收藏

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

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

在 Bash shell 脚本中可以用什么命令来检查目录是否存在?
  `; W( a4 K' E& ?% |8 n. Q                                                               
% k5 `  |: v" K# h' Y" u+ e7 ^% n: c. u    解决方案:                                                                * O. {! x8 a$ r
                                                                要检查 shell 脚本中是否有目录可以使用以下命令:
- ?1 t2 x$ C+ ]6 u2 \8 [0 aif [ -d "$DIRECTORY" ]; then  # Control will enter here if $DIRECTORY exists.fi或检查目录是否不存在:
# D: `9 F1 @% g  `& Vif [ ! -d "$DIRECTORY" ]; then  # Control will enter here if $DIRECTORY doesn't exist.fi但是,正如Jon Ericson如果您不考虑目录的符号链接也将通过此检查,则后续命令可能无法按预期工作。例如,操作:  _& @& q% \  R6 a* E$ O
ln -s "$ACTUAL_DIR" "$SYMLINK"if [ -d "$SYMLINK" ]; then   rmdir "$SYMLINK" fi产生错误信息:
2 {4 V" Y% k* C+ |rmdir: failed to remove `symlink’: Not a directory. a% O% R0 V; C$ B/ b- a0 \
因此,如果后续命令需要目录,可能需要区分符号链接:if [ -d “$LINK_OR_DIR” ]; then
% @4 l* Q' g* g6 p        if [ -L “$LINK_OR_DIR” ]; then# Y$ D8 _! T0 H0 y6 \* p6 W
                # It is a symlink!' B$ D6 N" a4 k; G8 D
                # Symbolic link specific commands go here.4 ~% I4 [4 P8 N! D% L
                rm “$LINK_OR_DIR”
( S4 N: w' v/ }        else! }) [: g9 c3 F' A0 z
                # It’s a directory!: Z6 O7 q+ \9 P
                # Directory command goes here.
+ v( i5 N5 ~+ M! U                rmdir “$LINK_OR_DIR”  ?7 W/ O) C* C+ A* H' W9 c" G
        fi* m4 n! E5 T1 z% X# r( f. \
fi9 O" h3 I' K0 A" L0 ~& r
```
. O8 g1 b. i/ E0 r: E0 z5 Q请特别注意包装变量的双引号。jean在另一个答案中解释了原因。
9 {) I& O$ |+ Y" m- M# n1 G如果变量包含空格或其他异常字符,则可能会导致脚本失败。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则