TL; DR
Ninguna de las otras respuestas realmente aborda su pregunta original de por qué el comando da un error de sintaxis. Esto es causado por un comando faltante entre entonces y más .
Un comando perdido
Su código original se ve así:
if lsof "$filename" > /dev/null
then
# file is open
else
echo "deleting $filename"
rm "$filename"
fi
El problema es que tiene un comentario entre entonces y más , pero el comentario no se trata como un comando. En resumen, podría volver a escribir el problema que tiene (estructuralmente hablando) de la siguiente manera:
$ if true; then else echo; fi
bash: syntax error near unexpected token `else'
Arregle su sintaxis con un Bourne Builtin
Puede solucionar este problema colocando comandos reales antes que otra cosa , pero un comentario por sí solo no servirá. La sección if-then no puede estar vacía; si quieres un marcador de posición, puedes usar el colon incorporado . Por ejemplo:
$ if true; then :; else echo; fi
Simplemente colocando :
en la sección entre entonces y de lo contrario se solucionará el error de sintaxis que está experimentando.