什麼命令可用於檢查Shell腳本中是否存在目錄? shell
這是一個很是實用的習慣用法: 函數
(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
。 在這個級別上,我寧願保持簡單-函數的參數只是字符串。
或徹底沒有用的東西:
[ -d . ] || echo "No"
file="foo" if [[ -e "$file" ]]; then echo "File Exists"; fi;
[ -d ~/Desktop/TEMPORAL/ ] && echo "DIRECTORY EXISTS" || echo "DIRECTORY DOES NOT EXIST"
使用-e
檢查將檢查文件,其中包括目錄。
if [ -e ${FILE_PATH_AND_NAME} ] then echo "The file or directory exists." fi