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

sem*_*ius 35 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
Run Code Online (Sandbox Code Playgroud)

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

Nid*_*ger 77

它足以检查-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
Run Code Online (Sandbox Code Playgroud)

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

它应该是

read file
Run Code Online (Sandbox Code Playgroud)

代替

read $file
Run Code Online (Sandbox Code Playgroud)

如果你想要进一步的信息,我建议阅读man testman read

  • -s 在 `dir` 的情况下返回 true。如果我们只想检查是否有空文件,则结合 -f 和 -s 条件 (3认同)

Sam*_*uel 6

请注意,如果文件存在且不为空,[ -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
Run Code Online (Sandbox Code Playgroud)

  • 另一个选项`[-f“ $ file” -a -s“ $ file”]` (2认同)
  • Shellcheck 实际上对此发出警告:````更喜欢 [ p ] && [ q ],因为 [ p -aq ] 没有明确定义。```` (2认同)