檢查外殼腳本中是否存在目錄

什麼命令可用於檢查Shell腳本中是否存在目錄? shell


#1樓

這是一個很是實用的習慣用法: 函數

(cd $dir) || return # is this a directory,
                    # and do we have access?

我一般將其包裝在一個函數中: this

can_use_as_dir() { 
    (cd ${1:?pathname expected}) || return
}

要麼: spa

assert_dir_access() { 
    (cd ${1:?pathname expected}) || exit
}

這種方法的好處是,我沒必要考慮一個好的錯誤消息。 code

cd會給我一條標準的一行消息給stderr。 它還將提供比我所能提供的更多的信息。 經過在子外殼程序( ... )執行cd ,該命令不會影響調用者的當前目錄。 若是目錄存在,則此子外殼程序和該函數僅是no-op。 對象

接下來是傳遞給cd的參數: ${1:?pathname expected} 。 這是參數替換的一種更詳盡的形式,下面將對其進行詳細說明。 文檔

Tl; dr:若是傳遞給此函數的字符串爲空,則再次退出子shell ( ... )並從函數返回給定的錯誤消息。 字符串


引用ksh93手冊頁: it

${parameter:?word}

若是parameter被設置而且非空,則替換其值; 不然,打印word並退出外殼(若是不是交互式的話)。 若是省略word則打印標準消息。 file

若是上述表達式中省略了冒號: ,則shell僅檢查是否設置了參數。

措辭在shell文檔中是特有的,由於word能夠指代任何合理的字符串,包括空格。

在這種特殊狀況下,我知道標準錯誤消息1: parameter not set是不夠的,所以我放大了咱們在這裏指望的值的類型-目錄的pathname

一個哲學註釋:shell不是一種面向對象的語言,所以該消息顯示pathname ,而不是directory 。 在這個級別上,我寧願保持簡單-函數的參數只是字符串。


#2樓

或徹底沒有用的東西:

[ -d . ] || echo "No"

#3樓

file="foo" 
if [[ -e "$file" ]]; then echo "File Exists"; fi;

#4樓

[ -d ~/Desktop/TEMPORAL/ ] && echo "DIRECTORY EXISTS" || echo "DIRECTORY DOES NOT EXIST"

#5樓

使用-e檢查將檢查文件,其中包括目錄。

if [ -e ${FILE_PATH_AND_NAME} ]
then
    echo "The file or directory exists."
fi
相關文章
相關標籤/搜索