在Bash脚本中检查目录是否存在总是失败

在Bash脚本中检查目录是否存在总是失败,bash,directory,getopt,Bash,Directory,Getopt,我有个问题困扰了我几个小时了。我使用getopt创建了一个参数--file dir,它为程序分配了一个要使用的目录。在参数之后,用户可以选择他们喜欢的任何目录。为了保持程序稳定,我检查该目录是否存在。下面的代码是我当前拥有的,它总是返回“目录不存在。正在终止”。即使在我搜索我的/home目录时也是如此 -a |--file dir)file_dir=$2; 如果[!-d“$FILE_DIR”];然后 echo“目录不存在。正在终止。”; 出口1; 其他的 echo“目录存在。”; fi; 移位

我有个问题困扰了我几个小时了。我使用getopt创建了一个参数
--file dir
,它为程序分配了一个要使用的目录。在参数之后,用户可以选择他们喜欢的任何目录。为了保持程序稳定,我检查该目录是否存在。下面的代码是我当前拥有的,它总是返回“目录不存在。正在终止”。即使在我搜索我的
/home
目录时也是如此

-a |--file dir)file_dir=$2;
如果[!-d“$FILE_DIR”];然后
echo“目录不存在。正在终止。”;
出口1;
其他的
echo“目录存在。”;
fi;
移位


非常感谢您的任何意见。getopt在echo测试等方面工作正常,但在检查目录时失败

最好检查一下你的论点是否正确:

-a|--file-dir) FILE_DIR=$2 ; 
    if [ ! -d "$FILE_DIR" ]; then
        echo "Directory \"$FILE_DIR\" does not exist. Terminating." ;
        exit 1;
    else
        echo "Directory exists." ;
    fi ;
    shift;;

如果不确定,问题不在检查器中,而是在参数解析循环中的某个地方。

我有一个相同行为的问题:在命令行中检查目录按预期工作,但在脚本中完成时总是失败

我在git bash for Windows下运行此脚本:

while read -r i; do
    [ ! -d "$i" ] && echo "No $i"
done < "$1"

OP可能也有类似的问题,不可打印的字符会妨碍您的工作。

尝试更改脚本的shebang(第一行),然后在
-xv
后面添加一个空格,然后重新运行,以便在执行脚本时查看脚本行。新的第一行看起来像
#/bin/bash-xv
您的问题没有正确聚焦。看起来您的问题在于检查目录是否存在,但您提到了getopt,并且显示了case语句的一个片段。我期待着:看,我在这里做
ls
,看
banana
是一个目录,但看,当我做
[-d banana]
时,它不起作用。在这方面,你的问题是不恰当的。我们不可能确定你的问题在哪里,除非做出不可能的疯狂猜测,有人可能会很幸运并证明我是错的,但我坚持我的观点:你的问题没有很好的针对性。在if语句之前,我有一个论点“echo$FILE_DIR”来确定。我只是把它拿出来,让网站上的代码变得更小。谢谢你的回复!
while IFS=$'\r\n' read -r i; do