Instruction sh

Fermé
bernard - 8 févr. 2010 à 23:57
 bernard - 9 févr. 2010 à 11:00
Bonjour, je suis un peu perplexe devant une instruction en sh. J'ai dans un répertoire un fichier toto.
cat toto -> f1 f2 f3
Dans ce même répertoire j'ai 2 fichiers : f1 qui contient 5 et f2 qui contient 6, jusque la facile, donc dans mon répertoire j'ai 3 fichiers : toto, f1 et f2 d'accord?


SI dans un script shell j'écris ceci:

read fic1 fic2 fic3 < "$1" ($1 représente le fichier toto dans mon cas)
read nb1 < $fic1

ça me met la valeur 5 dans la variable nb1. Mais je ne comprends pas du tout pourquoi...

Lorsqu'on fait read fic1 fic2 fic3 < $1 on met la valeur f1 dans fic1 vous êtes d'accord? Donc fic1 vaut f1.
Mais ensuite quand on a read nb1 < $fic1, on met la valeur du fichier f1 dans nb1, ce que je comprends pas du tout c'est pourquoi ici $fic1 est considéré comme la valeur du fichier f1 du répertoire, je ne comprends pas du tout, quelqu'un a t'il une explication svp?

merci

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
9 févr. 2010 à 08:53
Salut,

ça me met la valeur 5 dans la variable nb1. Mais je ne comprends pas du tout pourquoi...
Tout simplement parce que "read nb1 < $fic1" est équivalent à :
read nb1 < f1
Donc à transmettre le contenu de "f1" et non pas à assigner le nom de la variable.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
9 févr. 2010 à 09:09
Pour affecter le contenu de la variable $fic1 et non pas l'interpréter :

 read nb1 <<< $fic1

0
bernard > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
9 févr. 2010 à 09:32
mais la variable f1 n'est définie nulle part dans mon script, donc par défaut shell prend l'élément nommé f1 du répertoire?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > bernard
9 févr. 2010 à 09:43
Ben si elle est définie dans la mesure où tu l'as assignée indirectement dans ton 1er "read" à la variable "$fic1".
0
oui mais ce f1 c'est le f1 du fichier toto, or ici on met dans nb1 la valeur du fichier f1 du répertoire et non du f1 de toto...
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
9 févr. 2010 à 10:58
Parce que la variable est interprétée !!!

Pour ne pas qu'elle soit interprétée, voir message #2.
0
bernard > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
9 févr. 2010 à 11:00
merci jipicy pour ces éclaircissements :)
0