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

5 réponses

1 2
Avatar
Ma Dalton
tien tien, c'est intéressant comme méthode

Bonjour,
cela m'amène à la question suiante: au lieu d'une seule adresse IP par ligne
(dans le fichier.txt), si j'ai plusieurs variables qui se suivent, comment
récupérer chacune d'elles pour un traitement

ex . fichier.txt
192.168.0.1 Joe 1234
192.168.0.2 Jane 9876
est-ce que je peux récupérer $a $b et $c via une boucle

merci

"Laurent Wacrenier" <lwa@ teaser . fr> a écrit dans le message de news:

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
Laurent Wacrenier
Ma Dalton écrit:
cela m'amène à la question suiante: au lieu d'une seule adresse IP par ligne
(dans le fichier.txt), si j'ai plusieurs variables qui se suivent, comment
récupérer chacune d'elles pour un traitement

ex . fichier.txt
192.168.0.1 Joe 1234
192.168.0.2 Jane 9876
est-ce que je peux récupérer $a $b et $c via une boucle


while read a b c; do ... ; done < fichier.txt

Avatar
Ma Dalton
merci mais je ne suis pas certains de bien comprendre. j'ai l'impression
qu'avec votre proposition je dois utiliser $a $b et $c dans la même commande
do (sur une seule ligne), mais je dois me tromper (je suis plutôt novice en
shell)

en réalité mon besoin réel serait de convertir ceci (un fichier cmd de
windows) puisque je souhaite l'implanter directement en shell unix
(idéalement en csh)

FOR /F "tokens=1,2,3,4" %%a IN (fichier.txt) DO (
echo OPEN %%a > Script.ftp
echo USER %%b %%c >> Script.ftp
echo BINARY >> Script.ftp
echo PUT %%d >> Script.ftp
echo BYE >> Script.ftp
ftp -inv -s:"Script.ftp" >> JournalFTP.log
)

merci pour votre aide


"Laurent Wacrenier" <lwa@ teaser . fr> a écrit dans le message de news:

Ma Dalton écrit:
cela m'amène à la question suiante: au lieu d'une seule adresse IP par
ligne
(dans le fichier.txt), si j'ai plusieurs variables qui se suivent,
comment
récupérer chacune d'elles pour un traitement

ex . fichier.txt
192.168.0.1 Joe 1234
192.168.0.2 Jane 9876
est-ce que je peux récupérer $a $b et $c via une boucle


while read a b c; do ... ; done < fichier.txt



Avatar
Pascal Bourguignon
"Ma Dalton" writes
:> "Laurent Wacrenier" <lwa@ teaser . fr> a écrit dans le message de news:

Ma Dalton écrit:
cela m'amène à la question suiante: au lieu d'une seule adresse IP par
ligne
(dans le fichier.txt), si j'ai plusieurs variables qui se suivent,
comment
récupérer chacune d'elles pour un traitement

ex . fichier.txt
192.168.0.1 Joe 1234
192.168.0.2 Jane 9876
est-ce que je peux récupérer $a $b et $c via une boucle


while read a b c; do ... ; done < fichier.txt


merci mais je ne suis pas certains de bien comprendre. j'ai l'impression
qu'avec votre proposition je dois utiliser $a $b et $c dans la même commande
do (sur une seule ligne), mais je dois me tromper (je suis plutôt novice en
shell)

en réalité mon besoin réel serait de convertir ceci (un fichier cmd de
windows) puisque je souhaite l'implanter directement en shell unix
(idéalement en csh)


Non, idéalement, en sh, bash ou zsh, pas en csh!


FOR /F "tokens=1,2,3,4" %%a IN (fichier.txt) DO (
echo OPEN %%a > Script.ftp
echo USER %%b %%c >> Script.ftp
echo BINARY >> Script.ftp
echo PUT %%d >> Script.ftp
echo BYE >> Script.ftp
ftp -inv -s:"Script.ftp" >> JournalFTP.log
)

merci pour votre aide


#!/bin/bash
while read a b c d ; do
( echo "OPEN $a"
echo "USER $b $c"
echo "BINARY"
echo "PUT $d"
echo "BYE" ) > script.ftp
ftp -inv -s:"script.ftp" >> journal-ftp.log
done < fichier.txt


Voir les posts de Chazelas pour les détails avec IFS et autres options
de read.

Je ne connais pas de 'ftp' sur unix qui accepte ces
options. J'utiliserais ncftpput (ncftp), ou expect avec le ftp
standard. Finalement, vois si tu ne veux pas utiliser plutôt sitecopy.




--
__Pascal Bourguignon__ http://www.informatimago.com/
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d? s++:++ a+ C+++ UL++++ P--- L+++ E+++ W++ N+++ o-- K- w---
O- M++ V PS PE++ Y++ PGP t+ 5+ X++ R !tv b+++ DI++++ D++
G e+++ h+ r-- z?
------END GEEK CODE BLOCK------



Avatar
DoMiNiX

...

"Laurent Wacrenier" <lwa@ teaser . fr> a écrit dans le message de news:


Ma Dalton écrit:

...







s'il vous plait, evitez de poster a l'envers dans les forum de discution.

http://www.giromini.org/usenet-fr/repondre.html#2

--
dominix


1 2