Forum Programmation.shell Débutisme dans les Scripts

Posté par  .
Étiquettes : aucune
0
29
mar.
2005
Bonjour à tous,

Je suis en train d'essayer d'écrire un script en awk pour recuperer les adresses IP contenu dans mon fichier /etc/hosts. (j'ai recupere le script sur un site et je l'ai adapté au traitement de mon fichier hosts).

J'obtiens bien une liste à l'écran de ces serveurs, mais je voudrais aussi faire un PING de chacun de ces serveurs pour vérifier leur connexion. juste après le print "Adresse IP" $1.
Mais je ne connais rien à la syntaxe dans awk. Comment peut on recuperer les zones $1...$10 dans des variables pour les utiliser en appelant des programmes externes (ping en l' occurence).

Voici mon script, pouvez vous m'aider ?

Merci d'avance.


#!/usr/bin/awk -f

BEGIN {
print "Début du script"
nbComment=0
nbServeur=0
}
(/^#/ || /^$/){
nbComment++
}

{
nbServeur++
print "Adresse IP : " $1
}

END {
print "Nb Lignes Traitées :" nbServeur " dont " nbComment" Lignes de commentaires."
}
  • # system

    Posté par  . Évalué à 1.

    system() a l'air de correspondre a ce que tu cherches:

    http://www.parinux.org/ressources/supports-confs/awk/commandes.html(...)
  • # 2 méthodes

    Posté par  . Évalué à 2.

    salut,

    En gros tu as 2 méthodes:
    - avec system:
    ret = system("ping " $1)
    print "retour", ret


    - avec le pipe:
    cmd = "ping " $1
    while ((cmd | getline ligne) > 0)
       print ligne
    close(cmd)

    La 1ère méthode devrait te suffire.
    un "ping -c 1 toto" te renvoit 0 si c'est ok
  • # Sans awk

    Posté par  (site web personnel, Mastodon) . Évalué à 3.

    Je propose de se passer de ce awk à la syntaxe obscure, pour n'utiliser que du bon vieux bash :

    SERVEURS=`cat /etc/hosts |grep '\.1'|cut -d " " -f 1`

    for i in $SERVEURS; do
    echo -n $i
    ping -c 1 -q $i|grep 'transmitted'
    done;
  • # SUPER MERCI A TOUS

    Posté par  . Évalué à 1.

    J'ai réussi grace à vous.

    D'une manière générale, comment peut on affecter à une variable de mon script, la valeur de "la zone" $1 de awk ?


    MaVariable = awk '{ print $1 }' /etc/Monfichier

    cette ligne ne fonctionne pas.
    • [^] # Re: SUPER MERCI A TOUS

      Posté par  . Évalué à 1.

      Si tu veux que MaVariable contienne le résultat de ton print, il suffit d'utiliser les backticks :

      MaVariable=`awk '{ print $1 }' /etc/Monfichier`

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.