如何检查 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如果变量包含空格或其他异常字符,则可能会导致脚本失败。 |
|
|
|
|
|