bashの構文が間違っていないのにSyntaxエラーで失敗する問題

Syntax error: end of file unexpected (expecting "fi")


if文の最後の"fi"がないというエラー。
バッチファイルはなんとなくわかるけど、シェルスクリプトは入社時にちょっと覚えただけなので構文が全然わからない。でも、構文は合ってるように見えるんだけど…

OKWAVEの質問への回答に原因がかかれていた。
odでbinary dumpして文字コードを確認するのは、よくLinuxのバイナリを解析する人じゃないと考えつかない。パケット解析とかだろうか。
ともあれ、Linux(UNUX)では改行コードはLFでなければならないようだ。

サクラエディタで[名前をつけて保存]で、改行コードにLF(UNIX)を指定して保存し、実行したらうまくいった。

UNIXの改行コードはLFでなければならない!

多分、数日で忘れるだろうけど、Linuxのシェルスクリプトで困ったら改行コードでハマったことを思い出したい。

gitでaddすると改行コードが違うとWarningが出た

warning: LF will be replaced by CRLF in create.sh.
The file will have its original line endings in your working directory

WindowsとLinuxとでバッチファイルとシェルスクリプトの両方をgitに登録しようとしたが、改行コードが混在していると警告が出るようだ。
バッチファイルは改行コードにLFが混在していると挙動がおかしくなるケースがあるらしく、環境で改行コードや文字コードを意識する必要がありそう。


この記事が気に入ったらサポートをしてみませんか?