Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/09/2007, 07h53   #1
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 943
Points : 4 943
Par défaut [bash]lire un fichier

Bonjour

J'ai un script qui a comme entrée un fichier, avec un paramètre pas ligne. POur le moment, je le lance avec
Code :
cat  proxies_2808.txt  | xargs ./script.sh
J'aimerai pouvoir lire les paramètres un à un dans le fichier d'entré pour mieux gérer la file d'attente (voir mon fil précédent :http://www.developpez.net/forums/sho...36#post2484536 )
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 09h57   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 310
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 310
Points : 8 592
Points : 8 592
J'ai pas tout compris et ton lien ne passe pas.

Pour lire un fichier ligne à ligne et construire une boucle, tu peux faire l'un des deux trucs suivants :
Code :
1
2
3
4
while read LINE
do
	traitement avec $LINE
done < fichier
ou
Code :
1
2
3
4
cat fichier | while read LINE
do
	traitement avec $LINE
done
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 09h27   #3
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 943
Points : 4 943
Citation:
Envoyé par _Mac_ Voir le message
Code :
1
2
3
4
cat fichier | while read LINE
do
	traitement avec $LINE
done
Je le teste et j'ai l'impression que c'est bon

__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 21h06   #4
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 943
Points : 4 943
Ça fait plaisir de voir que ma recherche google m'a mené directement au bond endroit avec la bonne réponse ! Et en plus, c'était déjà moi qui avait posé la question...
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 22h31   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 076
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 076
Points : 4 177
Points : 4 177
Par défaut uuoc

Faites attention !
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
 
cat uuoc.in | while read LINE
do
   set -- $LINE
   uuocVar+="$1"
done
echo "uuocVar = $uuocVar"
 
while read LINE
do
   set -- $LINE
   Var+="$1"
done < uuoc.in
echo "Var = $Var "
Code :
1
2
3
4
5
6
7
8
cat uuoc.in
foo bar baz
bar baz foo
baz foo bar
 
./uuoc.sh
uuocVar = 
Var = foo bar baz
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 08h45   #6
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 943
Points : 4 943
Intéressant comme remarque ! Mais, pourquoi ça marche comme ça ?
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 09h58   #7
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 076
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 076
Points : 4 177
Points : 4 177
Bonjour,

man bash dit :
Chaque commande du pipeline est exécutée comme un processus indépendant (c'est à dire dans un sous-shell).
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 10h16   #8
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 943
Points : 4 943
J'ai compris que tu conseilles la seconde méthode. Mais j'avoue que mon niveau de bash est tel que je ne comprends pas la ligne que tu viens de citer...
Pourquoi dans un cas ça marche et pas dans l'autre ! Je ne demande qu'à apprendre !
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 11h43   #9
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 076
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 076
Points : 4 177
Points : 4 177
Citation:
Envoyé par troumad
J'ai compris que tu conseilles la seconde méthode.
En effet, parce qu'il n'y a pas de bonne raison d'utiliser cat dans ce cas (tout comme pour grep, awk, sed...).

Citation:
Envoyé par troumad
Pourquoi dans un cas ça marche et pas dans l'autre
quand tu affectes une variable dans un script, la valeur de cette variable n'est disponible que dans ce script.
Le script est, en fait, un sous-shell du shell depuis lequel le script est appelé. Cette variable n'existe même pas pour le shell "père".

C'est pareil pour les tubes (pipelines).


s'exécutent dans un sous-shell :
- *sh -c 'commande'
- les scripts
- ( commande; commande)
- commande | commande
je crois que c'est tout
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 12h01   #10
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 943
Points : 4 943
Donc dans
Code :
1
2
3
4
5
6
cat uuoc.in | while read LINE
do
   set -- $LINE
   uuocVar+="$1"
done
echo "uuocVar = $uuocVar"
Nous avons qui est un sous script
Code :
1
2
3
4
5
while read LINE
do
   set -- $LINE
   uuocVar+="$1"
done
Et $uuocVar est interne au sous script et n'est pas connu par le script appelant.
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h14.


 
 
 
 
Partenaires

Hébergement Web