fatal_error a écrit:ce mécanisme s'appèle eval, je te laisse approfondir sur le net.
- Code: Tout sélectionner
echo ${2}
Bizarrement chez moi ça plante (peut être en partie parce que je veux utiliser eval dans une comparaison mais je ne crois pas quand même).
Jappelle mon script de cette façon
script.sh [-p] archive.tar fichier.txt [...]
Je traite pour le moment le cas avec l'option
Et si il y a un ou des fichiers passé en paramètre présent dans l'archive je dois afficher le chemin de ces fichiers.
Je vais sauter les test du nombre de paramètres ainsi que celui qui détectait sur l'option est présente ou pas; ils sont fonctionnels.
- Code: Tout sélectionner
val=0;
if [ $1 = -p ]
then
for i in `tar -tf $2`
do
for k in $(seq 3 $#)
do
if [ -d `eval echo \$$k` -o ! -r `eval echo \$$k` ]
then
echo "Usage: `eval echo \$$k` n'est pas un fichier accessible";
exit 3;
fi
if [ -f $k ]
then
if [ `basename $i` = $k ]
then
pwd;
val=`expr $val + 1`;
fi
fi
k=`expr $k +1`;
done
done
if [ $val -eq 0 ]
then
exit 4;
fi
exit 0;
Lorsque je lance donc avec 3 paramètres cest à dire
script.sh -p archive.tar fichier.txt
J'obtiens l'erreur me disant que: 18778k n'est pas un fichier accessible
Cela veut donc dire que le eval n'évalue pas correctement car normalement je devrais avoir fichier.txt comme valeur de $3 dans cet exemple; en réalité je ne devrais même pas entrer dans l'erreur d'usage sachant que le fichier est bien accessible.
Une idée ?
EDIT; j'ai pas encore modifié les valeurs pour k après le test défaillant; la problème se situe avant de toute façon.