2013-10-06 81 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:?} 
相关问题