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