![構文エラー:予期しないファイルの終わり[閉じる]](https://linux33.com/image/83828/%E6%A7%8B%E6%96%87%E3%82%A8%E3%83%A9%E3%83%BC%EF%BC%9A%E4%BA%88%E6%9C%9F%E3%81%97%E3%81%AA%E3%81%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%B5%82%E3%82%8F%E3%82%8A%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
#!/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
することを意味します。My
File.txt
My
File.txt_201501010101
あなたが望むものは次のとおりです。
mv "My File.txt" "My File.txt_201501010101"
詳細と避けるべきその他のトラップについては、以下を参照してください。 http://mywiki.wooledge.org/BashPitfalls#cp_.24file_.24target
exit 0
スクリプトの末尾にあるPSは重複しています。スクリプトがエラーなしで完了すると、終了ステータスは暗黙的にゼロです。