TL; DR
Tidak ada jawaban lain yang benar-benar menjawab pertanyaan awal Anda mengapa perintah tersebut memberikan kesalahan sintaksis. Ini disebabkan oleh perintah yang hilang antara itu dan yang lain .
Perintah yang Hilang
Kode asli Anda terlihat seperti ini:
if lsof "$filename" > /dev/null
then
# file is open
else
echo "deleting $filename"
rm "$filename"
fi
Masalahnya adalah Anda memiliki komentar antara saat itu dan yang lain , tetapi komentar tersebut tidak diperlakukan sebagai perintah. Singkatnya, Anda dapat menulis ulang masalah yang Anda miliki (secara struktural) sebagai berikut:
$ if true; then else echo; fi
bash: syntax error near unexpected token `else'
Perbaiki Sintaks Anda dengan Bourne Builtin
Anda dapat memperbaiki masalah ini dengan menempatkan perintah yang sebenarnya sebelum yang lain , tetapi komentar dengan sendirinya tidak akan melakukannya. Bagian jika-maka tidak boleh kosong; Jika Anda menginginkan placeholder, Anda dapat menggunakan builtin titik dua . Sebagai contoh:
$ if true; then :; else echo; fi
Cukup menempatkan :
ke bagian antara itu dan yang lain akan memperbaiki kesalahan sintaks yang Anda alami.