recuperer valeurs dans un fichier texte - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 15-01-2004 à 11:09:03
ca doit se jouer avec des cut mais je connais plus la syntaxe exacte (et le code pr le caractère retour à la ligne...)
Marsh Posté le 15-01-2004 à 11:18:04
tu peux te faire un tit script perl/python/bash/autre qui gérera ça intelligemment
Marsh Posté le 15-01-2004 à 11:20:30
oui j'ai l'intention de le faire en bash  
mais le pb c'est que je sais pas comment faire ...
Marsh Posté le 15-01-2004 à 11:23:50
man gawk  
 
 
ou sinon en bash : 
|   | 
 
à l'arrache 
Marsh Posté le 15-01-2004 à 11:26:07
bon j'essaie tt de suite ... 
merci de ton aide en tt cas  
je te dis tt a l'heure si ca a marche 
Marsh Posté le 15-01-2004 à 11:42:30
bon je viens d'essayé mais le pb  
c qu'il me prend mon fichier en tant que login et passwd ... 
et non la 1re ligne, la 2eme ... 
en fait je comprends pas ta premiere ligne : 
"for ligne in ${ton_fichier};" 
 
comment il sait que c les lignes en faisant ca ???
Marsh Posté le 15-01-2004 à 11:53:35
y a encore un petit pb  
il me prend cat comme nom d'utilisateur (login) ... 
pourtant qd je fais un cat a la main sur ce fichier ca marche bien ... 
comprend pas 
 
Marsh Posté le 15-01-2004 à 11:55:51
| davyd a écrit : bon je viens d'essayé mais le pb   | 
 
c'est le principe de la boucle for  ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif) 
  
 
n'oublie pas le cat dans ta commande : 
for ligne in `cat mon_fichier`; 
 
perso, je préfère utiliser les ` (ALTGR + 7) que ${}
Marsh Posté le 15-01-2004 à 11:57:00
ca y est j'ai trouvé 
en fait la premiere ligne doit ressemble a ca : 
 
for ligne in `cat ton_fichier`; do  
 
j'ai juste remplacer le $[cat mon fichier] par `cat mon fichier` 
 
Merci bcp de votre aide en tt cas. 
Vous me sauvez la vie !! 
 
a +
Marsh Posté le 15-01-2004 à 11:57:31
a ben on a repondu en meme tps ... 
 
:-)
Marsh Posté le 15-01-2004 à 11:58:41
regarde dans le topic de liens ; ya des sites qui décrivent comment faire des scripts.
Marsh Posté le 15-01-2004 à 12:00:00
ouai je vais regarder mais maintenant ca marche !!!! 
 
je decouvre petit a petit les scripts bash ... 
c puissant ca ma plait bien en fait 
 
allez a + tt le monde et merci de votre aide 
 
Marsh Posté le 15-01-2004 à 12:08:17
une derniere petite question : 
 
comment je peux faire pr mettre au debut du script  
de regarder si le fichier qu'il doit traiter existe ou pas 
et que selon il fasse le traitement ?
Marsh Posté le 15-01-2004 à 12:11:35
| davyd a écrit : une derniere petite question :  | 
 
 
if [ -e "$FILE" ]; then 
  echo "existe" 
else 
  echo "n' existe pas" 
  exit 1 
fi
Marsh Posté le 15-01-2004 à 12:14:23
merci
Marsh Posté le 15-01-2004 à 13:32:01
| Mjules a écrit :   | 
 
  quel rapport ?
 quel rapport ? 
 
les ` servent à "forcer" une évaluation d'une commande, tandis que ${} sert juste à accéder au contenu d'une variable ! 
 
Peut-être que tu confonds avec $() ... 
Marsh Posté le 15-01-2004 à 13:39:08
ca a pas l'air de marcher le "if [ -e "$FILE" ]; then "  
il le reconnait pas ... 
-e ca veut dire est-ce que ca existe ??
Marsh Posté le 15-01-2004 à 13:42:38
man bash 
 
puis recherche la chaine "-e" 
pour rechercher, tapes [/] 
puis ton texte à chercher, et [Entrée] 
et ensuite [n] pour aller à l'occurence suivante  
 
 
sinon si t'es sous KDE, [Alt]+[F2], tapes "man:bash" dans la boite qui est apparue, et entrée, et hop ! T'as le man dans konqueror 
Marsh Posté le 15-01-2004 à 13:55:14
| Mjules a écrit :   | 
 
pas moi : `` ne s'imbrique pas... 
Marsh Posté le 15-01-2004 à 14:20:01
alors la je comprends plus rien .... 
tt a l'heure ca marchait mais maintenant il me prend un par un tt les argumetns de la ligne 
 
genre il me met le login et le password identitique  
et apres il essaie de me rajouter l'utilisateur 'passwd' ... 
 
exemple : 
je veux ajouter "login" avec le mot de passe "passwd" 
 
et ben il me cree l'utilisateur login avec comme mot de passe login aussi  
et ensuite il me cree passwd avec comme mot de passe passwd ... 
 
comprends plus rien la ...
Marsh Posté le 15-01-2004 à 14:50:35
ouaip exact ! 
 
voilà donc une autre solution en awk à l'arrache : 
|   | 
Marsh Posté le 15-01-2004 à 14:51:04
en fait, donne plus exactement la commande à exécuter, ce sera plus facile ...
Marsh Posté le 15-01-2004 à 14:55:49
en fait ce que je veux faire c faire un useradd avec les parametre du fichier texte de la maniere suivante : 
 
le fichier texte est comme ca : 
 
login1 motdepasse1 
login2 motdepasse2 
... 
 
et moi je veux ajouter tous ces utilisateurs  
 
le pb c qu'il me prend les donnees une par une  
au lieu de faire  
useradd login1 -p motdepasse1 
et d'aller a la ligne pr la suite 
 
il me fait 
useradd login1 -p login1 
useradd motdepasse1 -p motdepasse1 
 
je comprends pas comment ca se fait ...
Marsh Posté le 15-01-2004 à 15:11:55
Je reprends ma ligne .... 
|   | 
Marsh Posté le 15-01-2004 à 15:14:03
| davyd a écrit :   | 
 
 
en fait c'est normal ! La boucle ne boucle pas sur chaque ligne mais sur chaque mot, donc du coup, ça marche pas ! Pour plus de détail voir man bash à la section "Commandes composees" ... 
Y a un moyen de contourner ce problème, mais bon, ça se fait aussi bien en awk 
Marsh Posté le 15-01-2004 à 15:15:24
tu saurais pas comment contourner ce pb parce que j'aimerai pas etre oblige d'utiliser awk ... (desole) 
 
avec les cut y a pas moyen?
Marsh Posté le 15-01-2004 à 15:40:58
c facile tu utilise pas le caractère espace comme délimiteur mais un car spécial et tu cut sur celui ci 
Marsh Posté le 15-01-2004 à 15:50:08
ouai ca marche cool ... 
 
et sinon vous savez comment faire pr que la commande "useradd"  
accepte les utilisateurs avec un "_" ?
Marsh Posté le 15-01-2004 à 16:03:09
bon ca a l'air de marcher  
sauf que de tps en tps le script que j'ai fait (pr ajouter les utilisateurs qui sont dans mon fichier texte) merde ... 
ca marche pas  
si je le relance ca marche ... 
quel est ce mystere ...???
Marsh Posté le 16-01-2004 à 09:29:13
ca marche pas set-x ... 
et puis c bizarre parce que mon script il marche une fois sur 3 a peu pres ... 
je vois pas bien la raison qui peut faire qu'il plante de tps en tps... 
 
mon script pr ajouter un utilisateur et changer son mot de passe c ca : 
 
#!/usr/bin/expect 
set user [lindex $argv 0] 
set motpasse [lindex $argv 1] 
spawn addgroup $user 
spawn useradd $user -p $motpasse -g $user -d /var/users/$user 
spawn passwd $user 
expect "Enter new UNIX password:" 
send "$motpasse\n" 
expect "Retype new UNIX password:" 
send "$motpasse\n" 
expect "passwd: password update successfully"  
 
et qd je lance : 
./script.sh [login] [mot_de_passe] 
 
il me met cette erreur : 
 
spawn passwd [login] 
passwd:unknown user [login] 
send: spawn id exp6 not open 
      while executing 
"send "$motpasse\n" 
 
 
si qqn comprend ... 
merci
Marsh Posté le 16-01-2004 à 12:15:07
en fait expect c un programme qui me dit genre : 
la je sais que va y avoir ca d'affiché  
donc a ce moment la faire ca . 
 
expected (en anglais) -> attendu 
 
donc c un programme qui simule ce que le shell devrait afficher 
 
enfin c ce que j'ai compris. 
Je suis pas specialiste non plus...  
 
Marsh Posté le 20-01-2004 à 16:58:47
Au lieu d'utiliser une boucle 'for in' avec des 'cut', on peut faire : 
 
| Code : 
 | 
 
 
Je dois avouer que je ne l'ai pas testé avec bash (ça fonctionne avec ksh).
Marsh Posté le 15-01-2004 à 11:05:59
salut !!
![[:alex_] [:alex_]](https://forum-images.hardware.fr/images/perso/alex_.gif) 
 
je sais que y a surement la reponse sur le net
mais mes recherches ayant été infructueuse jusque la
je me permet de vous demander:
est-ce que qqn sait comment recuperer les valeurs dans un fichier teste de la maniere suivante :
mon fichier texte se presente comme ca :
login1 passwd1
login2 passwd2
ce que je voudrais c recuperer les deux valeurs de la premiere ligne et ensuite recuperer les 2 valeurs de la ligne suivante ...
parce qu'en fait je voudrais faire une tache cron qui scanne ce fichier ttes les 10 minutes et qui ajoute les utilisateurs qui sont présents dans ce fichier.
Ensuite j'effacerai ce fichier pr eviter qu'il essaie de rentrer 10 fois les memes utilisateurs.
Voila merci de votre aide.
Message édité par davyd le 15-01-2004 à 11:06:47
---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"