TL; DR
Không có câu trả lời nào khác thực sự giải quyết câu hỏi ban đầu của bạn về lý do tại sao lệnh đưa ra lỗi cú pháp. Điều này được gây ra bởi một lệnh bị thiếu giữa lúc đó và khác .
Một lệnh mất tích
Mã ban đầu của bạn trông như thế này:
if lsof "$filename" > /dev/null
then
# file is open
else
echo "deleting $filename"
rm "$filename"
fi
Vấn đề là bạn có một bình luận giữa lúc đó và lúc khác , nhưng bình luận không được coi là một lệnh. Nói tóm lại, bạn có thể viết lại vấn đề bạn gặp phải (nói theo cấu trúc) như sau:
$ if true; then else echo; fi
bash: syntax error near unexpected token `else'
Sửa lỗi Cú pháp của bạn với Bản dựng Bourne
Bạn có thể khắc phục sự cố này bằng cách đặt các lệnh thực tế trước các lệnh khác , nhưng tự nó sẽ không nhận xét. Phần if-then không thể để trống; nếu bạn muốn giữ chỗ, bạn có thể sử dụng nội dung tích hợp . Ví dụ:
$ if true; then :; else echo; fi
Đơn giản chỉ cần đặt :
vào phần giữa sau đó và khác sẽ sửa chữa các lỗi cú pháp bạn đang gặp phải.