recuperer valeurs dans un fichier texte

recuperer valeurs dans un fichier texte - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 15-01-2004 à 11:05:59    

salut !!
 
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.
 
 [:alex_]


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"
Reply

Marsh Posté le 15-01-2004 à 11:05:59   

Reply

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...)

Reply

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

Reply

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 ...


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 11:23:50    

man gawk :)
 
ou sinon en bash :


for ligne in $(cat ton_fichier); do
  login=`echo ${ligne} | cut -d " " -f 1`
  passwd=`echo ${ligne} | cut -d " " -f 2`
  ma_commande mon_argument ${login} autres_arguments ${passwd}
done


à l'arrache ;)


Message édité par bobuse le 15-01-2004 à 12:09:13
Reply

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


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

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 ???


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

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
 


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 11:55:51    

davyd a écrit :

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 ???


c'est le principe de la boucle for  [:spamafote]  
 
n'oublie pas le cat dans ta commande :
for ligne in `cat mon_fichier`;
 
perso, je préfère utiliser les ` (ALTGR + 7) que ${}


Message édité par Mjules le 15-01-2004 à 11:56:36

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

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 +


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 11:57:00   

Reply

Marsh Posté le 15-01-2004 à 11:57:31    

a ben on a repondu en meme tps ...
 
:-)


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

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.


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

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
 


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

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 ?


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 12:09:50    

if test -e fichier; then truc; fi

Reply

Marsh Posté le 15-01-2004 à 12:11:35    

davyd a écrit :

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 ?


 
if [ -e "$FILE" ]; then
  echo "existe"
else
  echo "n' existe pas"
  exit 1
fi

Reply

Marsh Posté le 15-01-2004 à 12:14:23    

merci


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 13:32:01    

Mjules a écrit :


perso, je préfère utiliser les ` (ALTGR + 7) que ${}


 
:??: 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 $() ... :)

Reply

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 ??


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

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 ;)

Reply

Marsh Posté le 15-01-2004 à 13:55:14    

Mjules a écrit :


 
perso, je préfère utiliser les ` (ALTGR + 7) que $()


pas moi : `` ne s'imbrique pas... :/

Reply

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 ...


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 14:50:35    

ouaip exact !
 
voilà donc une autre solution en awk à l'arrache :


gawk  '{system("ma_commande mon_argument "$1" autres_arguments "$2)}' ton_fichier

Reply

Marsh Posté le 15-01-2004 à 14:51:04    

en fait, donne plus exactement la commande à exécuter, ce sera plus facile ...

Reply

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 ...


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 15:11:55    

Je reprends ma ligne ....


gawk  '{system("useradd "$1" -p "$2)}' ton_fichier

Reply

Marsh Posté le 15-01-2004 à 15:14:03    

davyd a écrit :


je comprends pas comment ca se fait ...


 
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 :D

Reply

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?


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

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 :o


Message édité par Profil supprimé le 15-01-2004 à 15:41:09
Reply

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 "_" ?


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 16:01:09    

:eek: 227 vues

Reply

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 ...???


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 15-01-2004 à 18:01:36    

pour déboguer, ajoute "set-x" au début de ton script ;)

Reply

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


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 16-01-2004 à 11:58:59    

pardon c'est "set -x" ! (avec un espace)

Reply

Marsh Posté le 16-01-2004 à 11:59:50    

c'est quoi "#!/usr/bin/expect" :??:

Reply

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... :P


---------------
"c'est quand on est au pied du mur...qu'on voit le mieux le mur"
Reply

Marsh Posté le 20-01-2004 à 16:58:47    

Au lieu d'utiliser une boucle 'for in' avec des 'cut', on peut faire :
 

Code :
  1. [ -e fichier ] || exit 1
  2. while read login password
  3. do
  4.    adduser $login -p $password
  5. done < fichier


 
Je dois avouer que je ne l'ai pas testé avec bash (ça fonctionne avec ksh).

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed