Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/08/2013, à 00:23

l0f4r0

Script bash : unexpected EOF (bis)

Bonsoir à tous,

Quelqu'un pourrait-il me dire où se situe le pb dans le code suivant (l'idée est de changer les noms des fichiers du dossier sélectionné de photo*.jpg en image*.jpg) :

#!/bin/bash
(($#==1)) || { echo Vous devez rentrer qu\'un seul paramètre ; exit 23 ; }
[ -d $1 ] || { echo Vous devez rentrer un répertoire ; exit 24 ; }
[ -e $1 ] || { echo Le fichier n\'existe même pas ; exit 25 ; }
cd $1
compteur=0
for fic1 in photo*.jpg
do
fic2=$(echo $fic1 | sed -e 's/photo/image/')
mv $fic1 $fic2
((compteur++))
done
echo $compteur de fichier\(s\) ont été renommés

La sortie que j'ai est la suivante :

$ ./renommage.sh renommage
./renommage.sh: line 9: unexpected EOF while looking for matching `''
./renommage.sh: line 14: syntax error: unexpected end of file

Merci !
Jean-Laurent

Hors ligne

#2 Le 19/08/2013, à 01:53

Watael

Re : Script bash : unexpected EOF (bis)

salut,

laisses tomber les protections par anti-slash.
ponctuellement, soit, mais à la longue tu vas forcément en oublier.
utilise des guillemets.
et mets aussi tes variables entre guillemets.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 19/08/2013, à 08:17

tiramiseb

Re : Script bash : unexpected EOF (bis)

Salut,

Je n'ai aucune erreur lorsque j'essaie d'exécuter ton script.
Peut-être un problème de guillemets comme l'indique Watael.


Par ailleurs, concernant ta boucle, je simplifierais plutôt comme ça (non testé) :

echo "$(ls -1 $1/photo*.jpg | wc -l) fichiers sont renommés"
for i in photo*.jpg
do
  mv "$i" "$(echo "$i" | sed 's/photo/image/')"
done

Le compteur est inutile vu que tu peux compter les fichiers à traiter d'un coup au début du script.
Et le passage par une variable temporaire "fic2" est inutile

Hors ligne

#4 Le 19/08/2013, à 08:34

Watael

Re : Script bash : unexpected EOF (bis)

puisqu'on en est à l'optimisation

shopt -s nullglob
list=( "$1"/photo*.jpg )
for i in "${list[@]}"; do mv "$i" "${i/photo/image}"; done
echo "${#list[@]} fichiers ont été renommés"

Dernière modification par Watael (Le 19/08/2013, à 08:34)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne