TL; DR
Diğer yanıtların hiçbiri, komutun neden bir sözdizimi hatası verdiğine dair orijinal sorunuza cevap vermiyor. Bu o zaman ve başka arasında eksik bir komuttan kaynaklanır .
Eksik Komuta
Orijinal kodunuz şuna benzer:
if lsof "$filename" > /dev/null
then
# file is open
else
echo "deleting $filename"
rm "$filename"
fi
Sorun, o zaman ve diğer arasında bir yorumunuz olması , ancak yorumu bir komut olarak kabul etmiyor olmanızdır . Kısacası, (yapısal olarak konuşmakta olduğunuz) probleminizi aşağıdaki gibi yeniden yazabilirsiniz:
$ if true; then else echo; fi
bash: syntax error near unexpected token `else'
Bourne Builtin ile Sözdiziminizi Düzeltin
Daha önce fiili komutları yerleştirerek bu sorunu çözebilirsiniz başka , ama kendi başına bir açıklama yapmayacağım. Öyleyse, o zaman bölümü boş olamaz; Yer tutucu istiyorsanız, kolon yerleşimini kullanabilirsiniz . Örneğin:
$ if true; then :; else echo; fi
Basitçe o zaman ve başka:
bölümlerin arasına yerleştirmek , yaşadığınız sözdizimi hatasını düzeltecektir.