Bonjour.
Je suis en train de travailler sur un script qui modifie la taille des images de mon fichier Images/
Il est possible que l'erreur que m'affiche mon shell soit très simple à résoudre, mais je commence à fatiguer.
Voici mon code :
Et voici le beau message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #! /bin/bash find *.png > mypicts NBPICT=`wc -l mypicts | cut -d' ' -f1` i=1 while (i < "$NBPICT") { IMG=`sed -n ${i} mypicts` convert -resize 50% $IMG $(echo $IMG | sed s/\.png/_mini\.png/) i++ }; rm mypicts
A SAVOIR
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ./picture_script: line 12: syntax error: unexpected end of file
La commande convert n'est disponible qu'après avoir téléchargé le paquet "imagemagick"
J'ai Mandriva comme distribution, en VM
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 urpmi imagemagick
EXPLICATION DU CODE :
Donc au départ je trouve tout les .png de mon dossier Images/, et je les met dans un fichier nommé "mypicts"
Ensuite, je compte le nombre d'images que contient mon dossier à l'aide du dossier nouvellement créé, et j'enregistre ce nombre dans la variable NBPICT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 find *.png > mypicts
Puis vient ma boucle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 NBPICT=`wc -l mypicts | cut -d' ' -f1`
Ma boucle est délimitée par ma variable NBPICT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 i=1 while (i < "$NBPICT") { IMG=`sed -n ${i} mypicts` convert -resize 50% $IMG $(echo $IMG | sed s/\.png/_mini\.png/) i++ };
Je crée une variable IMG qui sera réinitialisée à chaque tour de boucle par le contenu d'une ligne de mon fichier "mypicts" (ainsi, au premier tour, IMG vaudra le nom de ma première image, au deuxième, le nom de la seconde, etc...) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 while (i < "$NBPICT")
Puis je change la taille de l'image :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 IMG=`sed -n ${i} mypicts`
Enfin je supprime le fichier "mypicts" pour pouvoir travailler sereinement la prochaine fois que je voudrait utiliser mon script (si j'ai moins d'images qu'avant par exemple) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 convert -resize 50% $IMG $(echo $IMG | sed s/\.png/_mini\.png/)
LES PROBLEMES
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2rm mypicts
J'ai testé chacune de ses commandes séparément, ainsi
fonctionne, ainsi que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 convert -resize 50% $IMG $(echo $IMG | sed s/\.png/_mini\.png/)
C'est ma boucle en elle même qui me pose problème,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 IMG=`sed -n s{i} mypicts`
1ère question :
NBPICT est un nombre, ou bien une chaine de caractère coupée, si c'est un nombre, alors il n'y a pas de problème à l'utiliser dans :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 NBPICT=`wc -l mypicts | cut -d' ' -f1`
en revanche, si c'est une chaine de caractère tronquée, son utilisation dans "while" peut être compromettante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 while (i < "$NBPICT")
2ème question :
Si le problème ne vient pas de là, d'où peut-il provenir ? (boucle mal faite peut-être).
Partager