TL; DR
Nenhuma das outras respostas realmente responde à sua pergunta original sobre por que o comando fornece um erro de sintaxe. Isso é causado por um comando ausente entre então e mais .
Um comando ausente
Seu código original é assim:
if lsof "$filename" > /dev/null
then
# file is open
else
echo "deleting $filename"
rm "$filename"
fi
O problema é que você tem um comentário entre então e outra coisa , mas o comentário não é tratado como um comando. Em resumo, você pode reescrever o problema que possui (estruturalmente falando) da seguinte maneira:
$ if true; then else echo; fi
bash: syntax error near unexpected token `else'
Corrija sua sintaxe com um Bourne interno
Você pode corrigir esse problema, colocando comandos reais antes de outra pessoa , mas um comentário por si só não vai fazer. A seção se-então não pode estar vazia; se você quiser um espaço reservado, use os dois pontos incorporados . Por exemplo:
$ if true; then :; else echo; fi
Simplesmente colocar :
na seção entre então e outra coisa corrigirá o erro de sintaxe que você está enfrentando.