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