检查外壳脚本中是否存在目录

什么命令可用于检查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