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。