Question Problème avec un script simple :(


Est-ce que quelqu'un pourrait me dire pourquoi ce script ne fonctionne pas correctement? Semble être un problème avec l'instruction if car je continue à recevoir l'erreur:

/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'

Le script:

#!/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

2
2017-10-11 09:44


origine


@ sinttx: Avez-vous modifié le script sur un système MS Windows? - Cyrus
salut @Jan merci j'ai essayé votre conseil mais toujours le même problème :( - sinttx
@Cyrus Nope J'utilise uniquement Kubuntu - sinttx
@sinttx: n'hésitez pas à vérifier votre fichier pour les caractères non imprimables: cat -v ddbackup.sh. - Cyrus
MERCI @Cyrus J'étais incorrect, il y avait un caractère non imprimable! Je devrai me souvenir de cette commande. Merci encore travaille un régal :) - sinttx


Réponses:


Comme @Cyrus suggéré, vous avez probablement un caractère non imprimable qui vous pose problème. La raison la plus probable est qu’à un moment donné, vous avez édité ce script à partir d’une machine Windows et \r a été ajouté à la fin de la ligne. Vous pouvez vérifier si quelque chose est présent sur cette ligne en cours d'exécution

grep 'if [ "$exit"' script.sh | od -c

Cela montrera tous les caractères, y compris ceux non imprimables.

Si vous avez effectivement un \r là, vous pouvez le réparer en courant "

sed -i 's/\r//' script.sh

Ou installer dos2unix (sudo apt-get install dos2unix) et en cours d'exécution

dos2unix script.sh > fixed.sh

1
2017-10-11 13:50