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 :

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
Et voici le beau message d'erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
./picture_script: line 12: syntax error: unexpected end of file
A SAVOIR

La commande convert n'est disponible qu'après avoir téléchargé le paquet "imagemagick"

J'ai Mandriva comme distribution, en VM


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"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
find *.png > 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
 
NBPICT=`wc -l mypicts | cut -d' ' -f1`
Puis vient ma boucle :

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++
};
Ma boucle est délimitée par ma variable NBPICT :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
while (i < "$NBPICT")
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
 
IMG=`sed -n ${i} mypicts`
Puis je change la taille de l'image :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
convert -resize 50% $IMG $(echo $IMG | sed s/\.png/_mini\.png/)
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) :

LES PROBLEMES

J'ai testé chacune de ses commandes séparément, ainsi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
convert -resize 50% $IMG $(echo $IMG | sed s/\.png/_mini\.png/)
fonctionne, ainsi que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
IMG=`sed -n s{i} mypicts`
C'est ma boucle en elle même qui me pose problème,

1ère question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
NBPICT=`wc -l mypicts | cut -d' ' -f1`
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
 
while (i < "$NBPICT")
en revanche, si c'est une chaine de caractère tronquée, son utilisation dans "while" peut être compromettante.

2ème question :

Si le problème ne vient pas de là, d'où peut-il provenir ? (boucle mal faite peut-être).