如果file存在且不为空。总是给我错误的价值

时间:2015-05-06 15:21:10

标签: linux bash scripting

我有一个bash脚本:

 echo " enter file name "
 read $file
 if [ -f "$file" ] && [ -s "$file" ]
 then 
    echo " file does not exist, or is empty "
 else
    echo " file exists and is not empty "
 fi

无论我输入$file,它都会给我错误的价值。我甚至可以输入一个甚至不存在的文件,它仍然会给我错误的价值。为什么那些家伙?提前致谢

2 个答案:

答案 0 :(得分:66)

检查-s就足够了,因为它说:

  

存在FILE并且大小大于零

http://unixhelp.ed.ac.uk/CGI/man-cgi?test

您的输出也会被切换,因此当文件存在时它会输出does not exists,因为如果文件存在且-sTRUE会给size > 0

你应该正确使用:

echo " enter file name "
read file
if [ -s "$file" ]
then 
   echo " file exists and is not empty "
else
   echo " file does not exist, or is empty "
fi

这将为您提供预期的输出。

也应该是

read file

而不是

read $file

如果您想了解更多信息,我建议您阅读man testman read

答案 1 :(得分:5)

请注意,[ -f "$file" ] && [ -s "$file" ]如果文件存在且不为空,则会返回true

其他选择:

if [[ -f "/path/to/file" && -s "/path/to/file" ]]; then 
    echo "exist and not empty"
else 
    echo "not exist or empty"; 
fi