編寫bash腳本的時(shí)候經(jīng)常遇到檢查某個(gè)路徑是否存在的時(shí)候,此時(shí)我們會(huì)使用-d和if語(yǔ)句來(lái)達(dá)成目標(biāo)。例如,當(dāng)路徑存在的時(shí)候我們想做一些操作,有
if [ -d "$DIRECTORY" ]; then
# operations here
fi
或者當(dāng)不存在的時(shí)候做一些操作
if [ ! -d "$DIRECTORY"]; then
# operations here
fi
然而,如果該路徑是鏈接的話會(huì)出現(xiàn)問(wèn)題,比如
ln -s "$ACTUAL_DIR" "$SYMLINK"
if [ -d "$SYMLINK" ]; then
rmdir "$SYMLINK"
fi
會(huì)產(chǎn)生錯(cuò)誤
rmdir: failed to remove `symlink': Not a directory
#錯(cuò)誤, 'symlink'不是一個(gè)路徑
所以,最完整的做法是加入是否為鏈接的判斷,如下
if [ -d "$LINK_OR_DIR" ]; then
if [ -L "$LINK_OR_DIR" ]; then
# 是一個(gè)鏈接
rm "$LINK_OR_DIR"
else
# 是一個(gè)路徑
rmdir "$LINK_OR_DIR"
fi
fi