Bash:如何检查目录是否存在?

Bash:如何检查目录是否存在?,bash,shell,Bash,Shell,我写了下面的if-else语句来检查directory1或directory2是否存在 if [ -d /opt/directory1 ] || [ -d /opt/directory2 ]; then echo "SUCCESS" else echo "FAil fi 但是,在某些服务器上,我遇到了一个错误 [: /opt/directory1: binary operator expected 所有服务器都在使用bash简单的Shell脚本为您提供答案 #!/bin/bash DIR

我写了下面的
if-else语句来检查
directory1
directory2
是否存在

if [ -d /opt/directory1 ] || [ -d /opt/directory2 ]; then
 echo "SUCCESS"
else
 echo "FAil
fi
但是,在某些服务器上,我遇到了一个错误

[: /opt/directory1: binary operator expected

所有服务器都在使用
bash

简单的Shell脚本为您提供答案

#!/bin/bash
DIR="$1"

if [ $# -ne 1 ]
then
    echo "Usage: $0 {dir-name}"
    exit 1
fi

if [ -d "$DIR" ]
then
    echo "$DIR directory  exists!"
else
    echo "$DIR directory not found!"
fi

使用Bash,这将为您提供所需的行为:

if [[ -d /opt/directory1 ]] || [[ -d /opt/directory2 ]] ; then
    echo "SUCCESS"
else
    echo "FAIL"
fi

请注意
-d
在这两种情况下的用法。

如何检查shell版本?@rkta有一个要点。您确定您的所有服务器都在使用Bash(如标签所示)?也许他们中的一些正在运行另一个shell:tcsh、ksh、zsh。。。您可以使用命令
echo$0
检查当前正在运行的shell。所有服务器都在使用
bash
我也检查了它(除了代码中缺少的dbl引号),实际上没有说,您需要
-d
,但它确实指向了导致问题的正确位置。因此,请在这里发布之前检查您的代码。很高兴你把它整理好了(奇怪的是,有些服务器允许这样做,有些服务器抱怨,
echo$BASH\u版本
)。祝你好运。即使
目录
存在,我也会将
失败
作为输出。您认为这可能与授予目录的权限有关吗?@meallhour对目录本身的权限并不重要,但您至少需要对其父目录及其路径上的每个目录具有搜索(“执行”)权限。因此,对于
[-d/foo/bar/baz]
,您需要访问/foo和/foo/bar,而不是/foo/bar/baz。