構文エラー: 予期しないファイルの終了

構文エラー: 予期しないファイルの終了
#!/bin/sh
if [ -e $1 ] ; then 
mv $1 $1_$(date +%Y%m%d%H%M) 
fi
exit 0

要件は、ファイルを検索し、ファイルが存在する場合はファイルの名前を変更してプログラムを終了することです。ファイルが存在する場合にのみ名前を変更する必要があります。

上記のエラーが発生しています

答え1

一般的に言えば、bash 変数は常に二重引用符で囲む必要があります。

たとえば、$1 が であるとしますMy File.txt。スクリプトはこれを実行しようとします:

mv My File.txt My File.txt_201501010101

これは、ファイル、、 をまとめて宛先 にmv移動することを意味します。MyFile.txtMyFile.txt_201501010101

代わりに必要なのは次のようになります:

mv "My File.txt" "My File.txt_201501010101"

詳細と回避すべきその他の落とし穴については、以下を参照してください。 http://mywiki.wooledge.org/BashPitfalls#cp_.24file_.24target

exit 0スクリプトの最後のPSは冗長です。スクリプトがエラーなしで終了した場合、終了ステータスは暗黙的に 0 になります。

関連情報