2010-05-24 62 views
0

我试图测试一个文件传递给我的脚本时是否存在目录路径。我使用dirname去除并保存路径。我希望我的脚本只有在路径存在的情况下才能运行。这是我的尝试。Shell脚本和测试表达式

FILE = $ 1 DIRNAME = dirname $FILE

如果[$ -z DIRNAME];然后 回声“错误没有文件路径” 退出1 fi

但这不起作用。实际没有文件路径时dirname $FILE仍然返回“。”。到DIRNAME,即这个目录。那么我怎么区分“。”和“/ bla/bla/bla”。

谢谢。

回答

0

为什么不使用

 
if [ -a $1] ; then echo "found file"; fi 

+0

这是真实的文件路径是否存在。我如何测试DIRNAME是否填充或保留“。” – Paul 2010-05-24 13:02:58

+0

如果[$ DIRNAME ==“。”就像 一样简单。 ];然后 我不知道为什么这不起作用。其他方面肯定是犯了错误 - 在哪里。 非常感谢您的快速响应。 – Paul 2010-05-24 13:20:19

+0

保罗,我很高兴你明白了 - 很抱歉,我的回答不是你想要的。错别字阻止您在工作中发布的代码可能很容易造成难以发现:) – atk 2010-05-24 20:21:30

0

你确定dirname正在检查文件系统的存在吗?你在什么操作系统上?我相信大多数dirnames只是进行字符串操作。所以这个:

dirname /one/two/three 

即使/ one不存在,返回/ one/two。

也许这是你在找什么:

FILE=$1 
DIRNAME=`dirname "$FILE"` 
if [ ! -d "$DIRNAME" ]; then 
    echo "$DIRNAME doesn't exist" >&2 
    exit 1 
fi 
+0

好的,谢谢。我稍后再检查一下。我正在进入需要尽快完成的事情。 – Paul 2010-06-08 07:28:25