mardi, avril 12, 2005

Un peu d'Unix

Je cherche désespérément la solution à ce problème :
Dans un script shell, je crée une boucle qui doit me produire une liste, laquelle est mémorisée dans une variable. Au sortir de la boucle, la variable est vide. Pourquoi ? Comment récupérer ma liste ? Voici le script :

#!/bin/sh
res=$(ls -l *jpg)

i=0
echo "$res" | while read line
do
i=`expr $i + 1`
test=`expr $i % 2`

if [ $test -eq 0 ] ; then
newline=$(echo "$line" paire)
else
newline=$(echo "$line" impaire)
fi
liste="$liste $newline"
done

echo "Nouvelle liste : $liste"
exit 0

Si vous avez des lumières, merci de m'en faire part...

6 Commentaires:

Anonymous Anonyme a écrit...

Pour ton probleme d'unix j'ai une piste mais ca n'a peut-etre rien a voir.

Il se trouve que j'ai eu a coder un shell recemment et j'ai eu presque le meme probleme que toi: c'etait du au fait que je gardais uniquement les pointeurs sur les commandes et non pas les commandes elles-memes. Et etant donné que le pointeur est declaré localement, le lien disparait a la sortie du bloc... (je sais pas si je suis tres clair).

La soluion: utiliser strcpy pour copier le contenu de la variable

16 avril, 2005 10:16  
Blogger DS a écrit...

Merci Chams. Mais j'ai peur que strcpy ne puisse être utilisé que dans un programme C et non sous forme de commande dans un shell script... Je continue à chercher. Au moins, grâce à toi, je dispose d'une piste. Encore merci.

16 avril, 2005 10:27  
Anonymous Anonyme a écrit...

Il faut "incorporer" l'opération dans la variable :

liste=`echo "$res" | while read line
do
# (... ici le coeur de la boucle...)
echo $newline
done`
echo "Nouvelle liste : $liste"

Et voilà. Ne pas oublier les "backquotes".

Chris

16 avril, 2005 12:39  
Blogger DS a écrit...

Merci Chris, c'est exactement la solution que je cherchais. A vrai dire, j'aurais pu y penser, mais je n'imaginais pas qu'on pouvait incorporer un bloc entier de commandes dans une variable (procédé assez étrange, il me semble)... Merci encore.

17 avril, 2005 11:04  
Anonymous Anonyme a écrit...

Bonjour

J' ai peur que ton script ne soit pas codé dans le bon language. Ne serait il pas plutot codé en c ou en c++. Je ne suis pas un programmeur très aaverti au niveua du c et du c++ mais la syntaxe m' a tous l' aire d' etre du c.

Cordialement

Nathaniel Bensaid
nathbensaid@hotmail.com

01 mai, 2005 16:40  
Blogger DS a écrit...

Pas de problème, Nathaniel. Ça ressemble à du C, mais c'est bien un shell script, comme l'atteste d'ailleurs la mention #!/bin/sh au début. Merci quand même. En fait, Chris m'a fourni la solution, et maintenant ce script fonctionne très bien.

01 mai, 2005 17:04  

Réagir | Masquer les commentaires


Archives|

|Accueil
Google