#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
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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