2013-10-06 139 views
0

我遇到了一些代碼問題,它說當文件不存在時,我知道它確實存在。代碼如下:「:沒有這樣的文件或目錄」當文件存在

#! /bin/ksh 
echo "Enter a file name" 
read fileName 
if [ -e $fileName ];then 
    less -M $fileName 
    gedit $fileName 
else 
    echo "$fileName is not a file" 
fi 

我幾乎可以肯定是錯過了一些令人眼花繚亂的明顯...我只是希望我知道那是什麼。無論如何,任何幫助將不勝感激。

+0

你檢查文件是否存在,不在於它不是一個目錄,而不是它的讀寫。我也不清楚這會給一個沒有任何意義的符號鏈接。還請包括確切的錯誤信息,最好是哪個命令提示它。最後,你輸入的文件名是否包含任何空格或者外殼元字符? –

+0

嗨邁克,謝謝你的迴應。所以你說我需要一個新的命令來代替-e?關於錯誤,收到的錯誤是:「:沒有這樣的文件或目錄」,並且在沒有空白字符(例如, owen.txt再次感謝 –

+2

使用'-f'來測試一個純文件(或符號鏈接指向一個文件),而不是目錄'-d',塊設備'-b',字符設備'c',符號鏈接'-L'或'-h',FIFO('-p',助記符'命名爲Pipe')等。使用'-s'來測試非空文件。 –

回答

0

在這裏我看到兩個選項:

  1. 存在拼寫錯誤的變量名
  2. 按Enter鍵沒有一個文件名。

無論哪種方式,這可以通過添加set -u到腳本, 的頂部或通過使用參數擴展與測試解決:${...:?}

最後,最好先處理異常,並嘗試報告實際發生的情況。 原始腳本中的錯誤消息遠離實際測試,並未反映測試的結果。在這種情況下,最好讓系統知道出了什麼問題。

下面是一個例子

#! /bin/ksh 
echo "Enter a file name" 
read fileName && [[ -e ${fileName:?} ]] || exit 

less -M ${fileName:?} || exit 
gedit ${fileName:?} 
相關問題