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