我有一个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
,它都会给我错误的价值。我甚至可以输入一个甚至不存在的文件,它仍然会给我错误的价值。为什么那些家伙?提前致谢
答案 0 :(得分:66)
检查-s
就足够了,因为它说:
存在FILE并且大小大于零
http://unixhelp.ed.ac.uk/CGI/man-cgi?test
您的输出也会被切换,因此当文件存在时它会输出does not exists
,因为如果文件存在且-s
,TRUE
会给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
答案 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