OVH Cloud OVH Cloud

Lancer une commande par ligne d'un fichier

15 réponses
Avatar
Joel
Bonjour

j'utilise une mandrake 9.2 et bash.

J'aimerai connaitre le moyen le plus simple (si possible sans passer par un
script)
pour exécuter une commande par ligne d'un fichier.

Exemple:
mon fichier fich.txt contient:
192.168.0.1
192.168.0.2
192.168.0.3

et je voudrais en une ligne de commande faire (par exemple) un ping sur
chacune des ip susdites

il me semble qu'un truc du genre fonctionne, mais existe il un truc moins
toturé ?
awk '{print "ping "$1}' fich.txt | sh

ce qui me gène notement dans la solution précédente c'est que je peut pas
facilement trafiquer la sortie pour par exemple avoir:
192.168.0.1: resultat du ping
192.168.0.2: resultat du ping
192.168.0.3: resultat du ping

Si quelqu'un a reussi a comprendre ce que je voulai, bravo et merci :)

Joel

10 réponses

1 2
Avatar
Sebastien Reboux
Le 09 Feb 2005, Joel cliqueta :

Bonjour


Salut,

pour exécuter une commande par ligne d'un fichier.

Exemple:
mon fichier fich.txt contient:
192.168.0.1
192.168.0.2
192.168.0.3

et je voudrais en une ligne de commande faire (par exemple) un ping
sur chacune des ip susdites


cat fich.txt | while read ip; do ping $ip; done

J'ai bon ?

Seb

Avatar
Laurent Wacrenier
Joel écrit:
Exemple:
mon fichier fich.txt contient:
192.168.0.1
192.168.0.2
192.168.0.3

et je voudrais en une ligne de commande faire (par exemple) un ping sur
chacune des ip susdites

il me semble qu'un truc du genre fonctionne, mais existe il un truc moins
toturé ?
awk '{print "ping "$1}' fich.txt | sh


xargs -n 1 ping < fich.txt

Avatar
Pascal Bourguignon
Sebastien Reboux writes:

Le 09 Feb 2005, Joel cliqueta :

Bonjour


Salut,

pour exécuter une commande par ligne d'un fichier.

Exemple:
mon fichier fich.txt contient:
192.168.0.1
192.168.0.2
192.168.0.3

et je voudrais en une ligne de commande faire (par exemple) un ping
sur chacune des ip susdites


cat fich.txt | while read ip; do ping $ip; done

J'ai bon ?


Presque. Suffit de relire l'anthologie de Stephane Chazelas:

http://groups-beta.google.com/groups?as_q=&numP&scoring=r&hl=en&ie=UTF-8&as_epq=&as_oq=&as_eq=&as_ugroup=fr.comp.os.unix&as_usubject=&as_uauthors=Stephane+Chazelas&lr=&as_drrb=q&as_qdr=&as_mind=1&as_minm=1&as_miny81&as_maxd=9&as_maxm=2&as_maxy 05&safe=off


Aussi, quand le fichier fich.txt est "petit" et "bien formé",
interactivement je préfère écrire:

for ip in $(cat fich.txt) ; do ping "$ip" ; done

Mais pour un script ou un fichier plus gros ou de taille inconnue,
Une solution basée sur: cat fich.txt | while read ip; do ping $ip; done
est meilleure.


--
__Pascal Bourguignon__ http://www.informatimago.com/

Nobody can fix the economy. Nobody can be trusted with their finger
on the button. Nobody's perfect. VOTE FOR NOBODY.


Avatar
Laurent Wacrenier
Pascal Bourguignon écrit:
Une solution basée sur: cat fich.txt | while read ip; do ping $ip; done
est meilleure.


On peut se passer du cat

Avatar
Rakotomandimby (R12y) Mihamina
( Wed, 09 Feb 2005 17:29:45 +0100 ) Joel :

Bonjour

j'utilise une mandrake 9.2 et bash.


si tu utilisait zsh :

for IP (`cat fichier.txt`) ( ping $IP )


--
L'ASPO a pour but de démocratiser l'acces a l'informatique. Une de ses
activité est l'infogerance (http://aspo.rktmb.org/activites/infogerance)
Tél: + 33 2 38 04 26 04 ou + 33 6 33 26 13 14 (France)

Avatar
ericb
Bonjour,

( Wed, 09 Feb 2005 17:29:45 +0100 ) Joel :

for IP (`cat fichier.txt`) ( ping $IP )


J'ai peut-être mal compris le problème, mais pourquoi ne met-on pas :
ping -c 1 Ou une autre option, pourquoi pas, au lieu de ping qui attend
un CTRL-C pour arrêter...
Parce que sinon, ça risque de durer, non ?



--
eric bachard
French OpenOffice.org Community contributor (build of french releases
for Linux PPC and Mac OS X / X11)
See : <http://fr.openoffice.org>

Avatar
Joel
Merci pour toutes vos reponses.

La solution de Laurent me semble la plus directe.


Merci a tous.
Avatar
Rakotomandimby (R12y) Mihamina
( Wed, 09 Feb 2005 19:23:51 +0100 ) ericb :

Bonjour,


Bonjour

ça risque de durer, non ?


Si.
En fait il faut a la fois limiter le nombre et exploiter le code retourné.
--
L'ASPO a pour but de démocratiser l'acces a l'informatique. Une de ses
activité est l'infogerance (http://aspo.rktmb.org/activites/infogerance)
Tél: + 33 2 38 04 26 04 ou + 33 6 33 26 13 14 (France)

Avatar
Laurent Wacrenier
Joel écrit:
Merci pour toutes vos reponses.

La solution de Laurent me semble la plus directe.


Au passage, si c'est pour faire du ping, tu devrais installer et
utiliser la commande fping qui peut lancer ses ping en parallele à
partir d'un fichier.

Avatar
Joel
"Laurent Wacrenier" <lwa@ teaser . fr> wrote in message
news:
Joel écrit:
Merci pour toutes vos reponses.

La solution de Laurent me semble la plus directe.


Au passage, si c'est pour faire du ping, tu devrais installer et
utiliser la commande fping qui peut lancer ses ping en parallele à
partir d'un fichier.


En fait nous changeons d'adresse IP a cette occasion notre nom de domaine
doit suivre notre nouvelle ip.
J'ai donc fait un fichier contenant une liste de dns.
Mon but etant de suivre la propagation de la mise a jour de l'ip sur les
differents dns. (avec un dig par exemple)

Voila :) donc pas besoin de fping :)

Merci


1 2