J'ai un fichier config.txt avec des adresses IP comme contenu comme celui-ci
10.10.10.1:80
10.10.10.13:8080
10.10.10.11:443
10.10.10.12:80
Je veux cingler chaque IP adresse dans ce fichier
#!/bin/bash
file=config.txt
for line in `cat $file`
do
##this line is not correct, should strip :port and store to ip var
ip=$line|cut -d\: -f1
ping $ip
done
Je suis un débutant, désolé pour une telle question mais je n'ai pas pu le découvrir moi-même.
La solution awk est celle que j'utiliserais, mais si vous voulez comprendre vos problèmes avec bash, voici une version révisée de votre script.
#!/bin/bash -vx
##config file with ip addresses like 10.10.10.1:80
file=config.txt
while read line ; do
##this line is not correct, should strip :port and store to ip var
ip=$( echo "$line" |cut -d\: -f1 )
ping $ip
done < ${file}
Vous pouvez écrire votre ligne supérieure comme
for line in $(cat $file) ; do ...
Vous aviez besoin de la substitution de commande $( ... )
pour obtenir la valeur affectée à $ ip
la lecture de lignes à partir d'un fichier est généralement considérée comme plus efficace avec le modèle while read line ... done < ${file}
.
J'espère que ça aide.
Vous pouvez éviter la boucle et couper etc. en utilisant:
awk -F ':' '{system("ping " $1);}' config.txt
Cependant, il serait préférable de publier un extrait de votre config.txt