2010-05-24 101 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