oui ca marche aussi ca...Code:FICHIER="`cat /home/afourquemin/file.cvs`"
Version imprimable
oui ca marche aussi ca...Code:FICHIER="`cat /home/afourquemin/file.cvs`"
marche pas !! sérieux ca me soule !!Code:
1
2
3
4
5
6
7 while read enreg; do echo $enreg USER=$(echo "$enreg" | cut -d';' -f1) NOM=$(echo "$enreg" | cut -d';' -f2) PASSWORD=$(echo "$enreg" | cut -d';' -f3) echo "$USER - $NOM - $PASSWORD" done < /home/root/scripts/file.csv
je ne sais pas se qu'il se passe ! j'ai l'impression que les ; foute la merde !
Non mais sérieu, je ne suis pas plus con qu'un autre !!!
regardez :
des erreurs !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #!/bin/bash # file_read FICHIER=$(cat /home/root/scripts/file.csv) echo $FICHIER for enreg in $FICHIER ; do echo $enreg USER=`echo $enreg | awk -F";" '{ print $1 }'` NOM=`echo $enreg | awk -F";" '{ print $2 }'` PASSWORD=`echo $enreg | awk -F";" '{ print $3 }'` echo "$USER - $NOM - $PASSWORD" # ### ton traitement # done [root@localhost scripts]# ./file_read Jean;lapin;ghsdfjkdf antoine;petit;54sfsdf Jean-François;Saint-James;55454df Mikeal;dubois;; emmanuel;grout;dfklpsdf arnaud;fourquemin;; '/file_read: line 6: syntax error near unexpected token `do '/file_read: line 6: `for enreg in $FICHIER ; do
Je viens de testé avec un fichier sans ;, tjr le même problème !
Vous savez quoi ?
Je suis un DIEU ! :lol: j'ai trouvé l'erreur !!!
for var in $FILE ;do
le ;do, il faut le collé !
Sinon j'ai une drole de découpe du fichier CSV :
Ca doit être du au faite que certain login sont sans mot de passe et donc ca merde sur la possition...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 File.CSV : Jean;lapin;ghsdfjkdf antoine;petit;54sfsdf Jean-François;Saint-James;55454df; Mikeal;dubois; emmanuel;grout;dfklpsdf arnaud;fourquemin; >ATTENTION car certain login sont sans mot de passe, dans ce cas, $PASSWORD sera vide Script : #!/bin/bash # file_read FILE=$(cat /home/root/scripts/file.csv) echo $FILE for var in $FILE ;do USER=`echo $var | awk -F";" '{ print $1 }'` NOM=`echo $var | awk -F";" '{ print $2 }'` PASSWORD=`echo $var | awk -F";" '{ print $3 }'` echo "$USER - $NOM - $PASSWORD" done Réponse : [root@localhost scripts]# ./file_read Jean;lapin;ghsdfjkdf; antoine;petit;54sfsdf; Jean-François;Saint-James;55454df; Mikeal;dubois;; emmanuel;grout;dfklpsdf; arnaud;fourquemin;; - ghsdfjkdf - 54sfsdf - 55454dfames - dubois - dfklpsdf - fourquemin
Comment faire pour eviter ce problème ?
Salut
Ne pas laisser la touche maj enfoncée quand on appuis sur espace... Selon la configuration, ça insère une espace insécable qui ne compte pas comme une espace (et pour cause...).Citation:
Envoyé par arnaudperfect
Je ne fais pas d'espace avec la touche MAJ enfoncé...
le soucie c'est que je ne peux meme pas faire mon traitement après car des que je met des variable en ligne, ca sucre la 1er variable ecrite
salut,
J'ai résolu le problème :
Tout s'affiche correctement, et je peux faire mes différents traitements par la suite.Code:
1
2
3
4
5
6
7
8
9
10 #!/bin/bash # file_read FILE=$(cat /home/root/scripts/file.csv) echo $FILE for var in $FILE ;do USER=`echo $var | awk -F";" '{ print $1 }'`NOM=`echo $var | awk -F";" '{ print $2 }'`PASSWORD=`echo $var | awk -F";" '{ print $3 }'` echo "$USER - $NOM - $PASSWORD" done
J'ai une autre question cependant : existe il un moyen pour dire "passe à l'enregistrement suivant"
exemple, le script m'affiche
Toto martin
[différents traitements]
utilisateur existant dans le systeme, voulez vous passez au suivant ?
...
...
merci d'avance ;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #!/bin/bash # file_read FILE=$(cat /home/root/scripts/file.csv) echo $FILE for var in $FILE ;do USER=`echo $var | awk -F";" '{ print $1 }'`NOM=`echo $var | awk -F";" '{ print $2 }'`PASSWORD=`echo $var | awk -F";" '{ print $3 }'` ----- Si (utilisateur présent dans /etc/passwd) alors Utilisateur présent dans le système voulez vous passer à un autre enregistrement ? o/n ---- done
man bash:
Code:
1
2
3
4
5
6 continue [n] Reprendre lexécution à litération suivante dune boucle for, while, until ou encore select. Si n est indiqué, reprendre lexécution à la n-ième boucle imbriquée. n doit être ≥ 1. Si n est supérieur au nombre de boucles imbriquées, lexécution reprend à la boucle la plus externe (la boucle « au som‐ met »). La valeur renvoyée est 0, à moins que linterpréteur ne soit pas en train dexécuter une boucle lorsquil rencontre linstruction continue.
ok, et avec un exemple ca donnerai quoi ?
???Code:
1
2
3
4 for i in 1 2 3 4 ;do echo $i n done
Exemple pratique ;)Citation:
Envoyé par arnaudperfect
Résultat :Code:
1
2
3
4
5
6
7
8
9
10
11 for i in 1 2 3 4 ; do ((modulo=i%2)) if [[ $modulo != 0 ]] ; then echo "* nombre impair, je continue" continue fi echo "* nombre pair, je cumule ..." ((total=total+i)) done echo "* $total"
* nombre impair, je continue
* nombre pair, je cumule ...
* nombre impair, je continue
* nombre pair, je cumule ...
* 6
d'accord
il suffit donc de mettre "continue" pour refaire un tour de boucle dans executer la suite du script contenu dans la boucle... j'ai bien compris ?
Citation:
Envoyé par arnaudperfect
Tu as tout compris :king:
ok, je l'ai utilisé ! nickel ! ca optimise l'execution du script !
en faite je l'utilise car si jamais je veux ajouter un utilisateur sur le système (avec un fichier de réponse > cat, for) et qu'il est déjà présent, je refais un tour de boucle pour faire l'utilisateur suivant sans passé par les étape de génération d'un mot de passe, addgroup, adduser... ca évite d'avoir des messages de ces deux dernières commandes !