Lire un fichier en Shell avec une boucle - Shell/Batch - Programmation
Marsh Posté le 11-06-2012 à 11:41:52
while read line
compte=$line
#traitement de la ligne
done < fichier
Bonjour, pourquoi pas ceci?
Je pense que le FOR n'est pas adapté pour parcourir un fichier. Sinon il y aurait la commande AWK que je ne maîtrise pas.
Marsh Posté le 12-06-2012 à 00:04:19
En théorie qq chose du style doit marcher :
Code :
|
Mais l'idéal est de mettre dans le script un paramètre (nom=$1 et reponse=$2) plutôt qu'un read nom/read reponse
A bientôt
Marsh Posté le 12-06-2012 à 14:38:44
Merci pour votre aide.
Alors je précise un peu plus ce que je recherche. J'ai un fichier avec un seul mot dans chaque ligne, j'aimerai dire par exemple:
$nom=toto
Tant que $toto=$ligne faire
commande
commande
commande
Fin tant que
Je sais pas si c'est clair. Encore un autre problème, ça serait de dire:
Tant que $toto ou $tata ou $tutu = $ligne, je peux utiliser: $toto || $tata || $tutu = $ligne ???
Merci encore pour votre aide !
Marsh Posté le 12-06-2012 à 14:48:39
nom=$toto
while read line
if [ "$line" = "$toto" ]
break
fi
commande
commande
commande
done < fichier
Pour ta deuxième solution, c'est plus:
while [ [ "$toto" = "$line" ] || [ "$tata" = "$line" ] || [ "$tutu" = "$line" ] ]
do
done
Marsh Posté le 12-06-2012 à 15:02:03
Merci pour ton aide:
J'ai donc pour testé fait:
Code :
|
Cela dit quand je lance le bash avec +x il m'indique:
Code :
|
Tu as une petite idée ?
Marsh Posté le 12-06-2012 à 15:10:24
Je crois que Bash est assez stricte avec les espaces dans les crochets de tests. Et j'ai oublié le "then"
Met bien:
if [ "$line" = "$toto" ]
then
break
fi
Marsh Posté le 12-06-2012 à 15:17:54
Super ça avance !
Maintenant il ne me reste plus que ça comme erreur d'exécution:
Code :
|
Une fois ceci fait après je pense ne plus avoir de problème, je te remercie encore pour ta précieuse aide !
Marsh Posté le 12-06-2012 à 15:22:37
tu remplaces fichier de la ligne 12 par le fichier ou se trouvent tous tes noms de compte.
Et normalement, ...
Marsh Posté le 12-06-2012 à 15:38:53
mmmh alors voila ce que j'ai:
Code :
|
J'ai essayé:
Code :
|
Il se trouve à la racine, donc dans /
Peut être l'extension du fichier .txt ?
Marsh Posté le 12-06-2012 à 15:49:04
likesum41 a écrit : La 1 et 3 devraient marcher, non? |
J'ai le même message d'erreur :
Code :
|
Marsh Posté le 12-06-2012 à 15:52:59
décidément je suis pas dans mon assiette, ajoute:
do
juste après la ligne du while
while read line
do
if [ "$line" ="$toto" ]
then
break
fi
Marsh Posté le 12-06-2012 à 16:06:09
Ca marche nettement mieux ! Je te remercie, je vais travailler sur cette base grâce à toi, j'espère pouvoir m'en tirer tout seul maintenant
Encore merci !
Marsh Posté le 12-06-2012 à 19:27:29
Je galère sur quelque chose: l'endroit où l'on met les commandes.
Si je les met après le fi comme tu me l'a dis, il me fait la commande X fois en fonction du nombre X de ligne que j'ai dans mon fichier.
Si je les met après le then rien ne fonctionne.
Si je les met avant le then rien ne fonctionne.
Si je les met après done < fichier ça fonctionne mais ça applique pas la condition.
La je suis un peu perdu, c'est pas du tout la même structure if / while / for qu'en batch.
Marsh Posté le 12-06-2012 à 20:26:31
cat pwet.txt | while read line
do
echo "$line"
done
Marsh Posté le 13-06-2012 à 02:06:24
salut,
Y a-t-il un codeur sur ce sujet ?
si tu veux lire le contenu d'un fichier
Code :
|
si tu veux lire le contenu d'un répertoire, en bash
Code :
|
c'est tout simple.
ce serait bien de préciser l'algorithme que tu as l'intention de coder : dessine un arbre de décision.
Marsh Posté le 13-06-2012 à 09:17:54
SI tu veux qu'il effectue ta commande qu'une fois dans le cas ou il a trouvé un doublon de ta variable dans le fichier, c'est quelque chose du genre:
#!/bin/bash
trouve="false"
charles=$toto
while read line
if [ "$line" = "$toto" ]
then
trouve="true"
break
fi
echo "mise a jour de charles" > test.txt
done < /list.txt
if [ "$trouve" = "true" ]
then
commande
fi
Marsh Posté le 11-06-2012 à 10:36:49
Bonjour à tous !
Voila j'ai créé un serveur pure-ftpd sous ubuntu. J'ai créé un script pour automatiser un peu la création d'un compte.
Maintenant j'aimerai l'automatiser avec une boucle for qui lit dans un fichier les comptes utilisateurs. J'ai cherché un peu partout, mais je dois dire que j'ai un peu de mal avec les boucles for. Quelqu'un connait la syntaxe pour importer à partir d'un fichier ? Comment devra se présenter mon fichier ?
Je vous remercie de votre aide !