![シンプルなスクリプトで問題発生 :(](https://rvso.com/image/1083746/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E5%95%8F%E9%A1%8C%E7%99%BA%E7%94%9F%20%3A(.png)
このスクリプトが正しく実行されない理由を教えてください。エラーが繰り返し発生するので、if ステートメントに問題があるようです。
/home/sinttx/Development/backup/ddbackup.sh: line 18: syntax error near unexpected token `then'
/home/sinttx/Development/backup/ddbackup.sh: line 18: if [ "$exit" -eq 0 ] ; then'
スクリプト:
#!/bin/bash
#(SINTTX) Function and if statement to backup/clone /dev/???.
echo "
THIS WILL COMPLETE A BACKUP OF DESIRED /DEV "
echo -n "Enter desired name for saved file (File will be saved with extention .iso) and press [ENTER]: "
read iso
echo -n "Enter the device to be duplicated/backed up (Eg /dev/sda) and press [ENTER]: "
read dev
echo -n "Enter the desired path/location for the backup file (Eg /home/USERNAME/backups/) and press [ENTER]: "
read path
echo "PLEASE ENTER THE SUDO PASSWORD (IF PROMPTED) AND WAIT :-)
NOTE: THIS COULD TAKE SOME TIME DEPENDING ON FILE SIZE AND HARDWARE SPEED!!"
sudo dd if="$dev" of="$path"/"$iso"
exit=$?
if [ "$exit" -eq 0 ] ; then
echo "SUCCESS"
else
echo "BACKUP HAS SUFFERED AN ERROR AND DID NOT COMPLETE SUCCESSFULLY"
fi
答え1
として@Cyrusが提案、おそらくそこに印刷されない文字があり、それが問題を引き起こしています。最も可能性の高い原因は、このスクリプトをWindowsマシンから編集した際に、\r
行末に が追加されたことです。その行に何かあるかどうかは、次のコマンドを実行して確認できます。
grep 'if [ "$exit"' script.sh | od -c
印刷されない文字も含め、すべての文字が表示されます。
実際にそこに存在する場合は\r
、実行することで修正できます。
sed -i 's/\r//' script.sh
または、dos2unix
(sudo apt-get install dos2unix
)をインストールして実行する
dos2unix script.sh > fixed.sh