간단한 스크립트에 문제가 있습니다 :(

간단한 스크립트에 문제가 있습니다 :(

누군가 이 스크립트가 올바르게 실행되지 않는 이유를 알려주실 수 있나요? 계속 오류가 발생하므로 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

처럼@사이러스가 제안했습니다, 문제를 일으키는 인쇄할 수 없는 문자가 있을 수 있습니다. 가장 가능성 있는 이유는 Windows 시스템에서 이 스크립트를 편집한 후 \r줄 끝에 a가 추가되었기 때문입니다. 다음을 실행하여 해당 줄에 항목이 있는지 확인할 수 있습니다.

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

관련 정보