シンプルなスクリプトで問題発生 :(

シンプルなスクリプトで問題発生 :(

このスクリプトが正しく実行されない理由を教えてください。エラーが繰り返し発生するので、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

または、dos2unixsudo apt-get install dos2unix)をインストールして実行する

dos2unix script.sh > fixed.sh

関連情報