# Script ping pour récupérer résultats

**URL:** <https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665>\
**Category:** Programmation\
**Created:** [Février 23, 2019, 10:30 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665 "2019-02-23T10:30:03Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Février 23, 2019, 10:30 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/1 "2019-02-23T10:30:03Z")

</div>

Hello à toutes et tous.  
Pour un projet perso,  
j’ai besoin de faire un script qui va pinguer google et orange, puis enregistrer les résultats.

voici mon petit script :

```
#!/bin/bash

echo "ping orange"
ping 8.8.8.8 -c5 >> /doudou/tmp/google.ping

echo "Ping google"
ping www.orange.fr -c5 >> /doudou/tmp/orange.ping

echo "traitement resultats"
#resultats google
echo "[ping google]" >>/doudou/tmp/resultats
grep icmp_seq=1 /doudou/tmp/google.ping >>/doudou/tmp/resultats
grep icmp_seq=2 /doudou/tmp/google.ping >>/doudou/tmp/resultats
grep icmp_seq=3 /doudou/tmp/google.ping >>/doudou/tmp/resultats
grep icmp_seq=4 /doudou/tmp/google.ping >>/doudou/tmp/resultats
grep icmp_seq=5 /doudou/tmp/google.ping >>/doudou/tmp/resultats

#resultats orange
echo "[ping orange]" >>/doudou/tmp/resultats
grep icmp_seq=1 /doudou/tmp/orange.ping >>/doudou/tmp/resultats
grep icmp_seq=2 /doudou/tmp/orange.ping >>/doudou/tmp/resultats
grep icmp_seq=3 /doudou/tmp/orange.ping >>/doudou/tmp/resultats
grep icmp_seq=4 /doudou/tmp/orange.ping >>/doudou/tmp/resultats
grep icmp_seq=5 /doudou/tmp/orange.ping >>/doudou/tmp/resultats

```

Et voici ce qui en ressort :  
[ping google]  
64 bytes from 8.8.8.8: icmp\_seq=1 ttl=128 time=6.38 ms  
64 bytes from 8.8.8.8: icmp\_seq=2 ttl=128 time=7.09 ms  
64 bytes from 8.8.8.8: icmp\_seq=3 ttl=128 time=7.22 ms  
64 bytes from 8.8.8.8: icmp\_seq=4 ttl=128 time=7.97 ms  
64 bytes from 8.8.8.8: icmp\_seq=5 ttl=128 time=7.20 ms  
[ping orange]  
64 bytes from [vip1.dyn.hpo.s1.fti.net](http://vip1.dyn.hpo.s1.fti.net) (193.252.148.241): icmp\_seq=1 ttl=128 time=16.9 ms  
64 bytes from [vip1.dyn.hpo.s1.fti.net](http://vip1.dyn.hpo.s1.fti.net) (193.252.148.241): icmp\_seq=2 ttl=128 time=16.4 ms  
64 bytes from [vip1.dyn.hpo.s1.fti.net](http://vip1.dyn.hpo.s1.fti.net) (193.252.148.241): icmp\_seq=3 ttl=128 time=16.1 ms  
64 bytes from [vip1.dyn.hpo.s1.fti.net](http://vip1.dyn.hpo.s1.fti.net) (193.252.148.241): icmp\_seq=4 ttl=128 time=16.9 ms  
64 bytes from [vip1.dyn.hpo.s1.fti.net](http://vip1.dyn.hpo.s1.fti.net) (193.252.148.241): icmp\_seq=5 ttl=128 time=16.6 ms

J’aimerais simplifier les lignes et au lieu d’avoir  
“64 bytes from [vip1.dyn.hpo.s1.fti.net](http://vip1.dyn.hpo.s1.fti.net) (193.252.148.241): icmp\_seq=5 ttl=128 time=16.6 ms”  
avoir que le temps soit  
“time1=16.9ms”, time2=16.4ms" etc…

Quelqu’un pourrait m’aider 🙂 ?

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 23, 2019, 11:56 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/2 "2019-02-23T11:56:16Z")

</div>

Bonjour

```bash
#!/bin/bash

fichSortie="/doudou/tmp/resultats"
maRegex='.* time=(.*)'

lancePing() {
    compteur=0
    lignePing=""
    while read; do
        [[$REPLY =~ $maRegex]] && \
        {
            compteur=$(($compteur+1))
            lignePing="$lignePing time$compteur=${BASH_REMATCH[1]},"
        }
    done <<< $(ping -c5 $2)
    printf '%s\n' "[$1]${lignePing:0:-1}" >> "$3"
}

lancePing "Ping google" 8.8.8.8 "$fichSortie"
lancePing "Ping orange" www.orange.fr "$fichSortie"

```

Le contenu de **/doudou/tmp/resultats** sera :

```nohighlight
[Ping google] time1=17.6 ms, time2=17.3 ms, time3=17.5 ms, time4=17.7 ms, time5=17.7 ms
[Ping orange] time1=17.8 ms, time2=18.3 ms, time3=18.4 ms, time4=18.3 ms, time5=18.0 ms

```

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Février 23, 2019, 12:32 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/3 "2019-02-23T12:32:26Z")

</div>

Hello  
Merci pour ta réponse.  
et ton script qui est génial.  
Je vais l’analyser pour le comprendre, va me falloir des jours je pense lol.  
J’aime bien comprendre ce qu’on me propose :).  
Petite question :  
Peut on éditer les résultats de ce type :

[Ping Google]  
time1=  
time2=

En tout cas merci encore pour ton aide.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 23, 2019, 1:05 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/4 "2019-02-23T13:05:29Z")

</div>

> [@domoticity](#):
>
> …les résultats de ce type :
> 
> [Ping Google]  
> time1=  
> time2=  
> …

Celui là devrait mieux correspondre au résultat que tu cherches à obtenir :

```bash
#!/bin/bash

fichSortie="/doudou/tmp/resultats" # Assigner un nom de fichier à la variable fichSortie
maRegex='.* time(=.*)' # Tout ce qui suit " time" jusqu'à la fin de la ligne

# Création d'une fonction nommée "lancePing"
lancePing() {
    compteur=0 # Initialiser le compteur à "0"
    printf '%s\n' "[$1]" >> "$3" # Envoyer dans le fichier de sortie une ligne contenant le premier paramètre entre crochets
    while read; do
        [[$REPLY =~ $maRegex]] && \
        {
            compteur=$(($compteur+1)) # Incrémenter le compteur
            printf '%s\n' "time$compteur${BASH_REMATCH[1]/ /}" >> "$fichSortie"
        }
    done <<< $(ping -c5 $2) # Rediriger la sortie de la commande ping vers l'entrée de la boucle while
}
# Fin de la définition de la fonction "lancePing"

lancePing "Ping Google" 8.8.8.8 "$fichSortie" # Lancer la fonction lancePing avec 3 paramètres
lancePing "Ping Orange" www.orange.fr "$fichSortie" # Lancer la fonction lancePing avec 3 autres paramètres

```

Il donne :

```plaintext
[Ping Google]
time1=17.5ms
time2=17.3ms
time3=19.1ms
time4=17.5ms
time5=21.6ms
[Ping Orange]
time1=17.7ms
time2=18.1ms
time3=18.2ms
time4=18.3ms
time5=18.2ms

```

=======

```plaintext
michel@debg53sw:~$ machaine="bla bla et autre … time=123456 jusqu'à la fin de la ligne"
michel@debg53sw:~$ maRegex='.* time(=.*)'

michel@debg53sw:~$ [[$machaine =~ $maRegex]] && echo ${BASH_REMATCH[1]}
=123456 jusqu'à la fin de la ligne

michel@debg53sw:~$ [[$machaine =~ $maRegex]] && echo ${BASH_REMATCH[1]/ /}
=123456jusqu'à la fin de la ligne

michel@debg53sw:~$ [[$machaine =~ $maRegex]] && echo ${BASH_REMATCH[1]// /}
=123456jusqu'àlafindelaligne

michel@debg53sw:~$ [[$machaine =~ $maRegex]] && echo "du texte ajouté juste avant${BASH_REMATCH[1]// /}"
du texte ajouté juste avant=123456jusqu'àlafindelaligne

```

* * *

Si aucun nom de variable n’est fourni à la fonction **read** (de l’interpréteur de commande **bash** )  
cette fonction créé automatiquement une variable nommée **REPLY**  
à laquelle cette fonction assignera pour valeur chaque ligne lue  
qui, dans ce script, provient de la sortie de la commande **ping**

Voir le retour de la commande :

```bash
man --pager="less -p ' read '" bash

```

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Février 23, 2019, 8:13 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/5 "2019-02-23T20:13:56Z")

</div>

> [@anon29980398](#):
>
> ```bash
> #!/bin/bash
> 
> fichSortie="/doudou/tmp/resultats" # Assigner un nom de fichier à la variable fichSortie
> maRegex='.* time(=.*)' # Tout ce qui suit " time" jusqu'à la fin de la ligne
> 
> # Création d'une fonction nommée "lancePing"
> lancePing() {
> compteur=0 # Initialiser le compteur à "0"
> printf '%s\n' "[$1]" >> "$3" # Envoyer dans le fichier de sortie une ligne contenant le premier paramètre entre crochets
> while read; do
> [[$REPLY =~ $maRegex]] && \
> {
> compteur=$(($compteur+1)) # Incrémenter le compteur
> printf '%s\n' "time$compteur${BASH_REMATCH[1]/ /}" >> "$fichSortie"
> }
> done <<< $(ping -c5 $2) # Rediriger la sortie de la commande ping vers l'entrée de la boucle while
> }
> # Fin de la définition de la fonction "lancePing"
> 
> lancePing "Ping Google" 8.8.8.8 "$fichSortie" # Lancer la fonction lancePing avec 3 paramètres
> lancePing "Ping Orange" www.orange.fr "$fichSortie" # Lancer la fonction lancePing avec 3 autres paramètres
> 
> ```

Je te remercie, au top ton script. Et merci également pour les explications 🙂

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Février 24, 2019, 12:25 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/6 "2019-02-24T12:25:34Z")

</div>

Hello encore moi 🙂

Désole de t’embeter encore, mais j’ai un petit soucis.

Sous Stretch, ton script passe nickel.

Par contre sous Jessie, voici ce qui en sort :

```
Ping Google]
time1=5.13ms --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 5.134/5.267/5.409/0.140 ms
[Ping Orange]
time1=15.2ms --- d.hpc.gtm.fti.net ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 15.276/15.317/15.341/0.145 ms

```

Pas de message d’erreur. ☹

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 24, 2019, 1:31 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/7 "2019-02-24T13:31:32Z")

</div>

Effectivement, je viens de constater le problème sous `debian 8 (jessie)`

J’ai donc reformulé le script de cette façon :

```bash
#!/bin/bash

fichSortie="/doudou/tmp/resultats" # Assigner un nom de fichier à la variable fichSortie
maRegex='.* time(=.*)' # Tout ce qui suit " time" jusqu'à la fin de la ligne

# Création d'une fonction nommée "lancePing"
lancePing() {
    compteur=0 # Initialiser le compteur à "0"
    printf '%s\n' "[$1]" >> "$3" # Envoyer dans le fichier de sortie une ligne contenant le premier paramètre entre crochets
    while IFS= read; do
        [[$REPLY =~ $maRegex]] && \
        {
            compteur=$(($compteur+1)) # Incrémenter le compteur
            printf '%s\n' "time$compteur${BASH_REMATCH[1]/ /}" >> "$fichSortie"
        }
    done < <(ping -c5 $2) # Rediriger la sortie de la commande ping vers l'entrée de la boucle while
}
# Fin de la définition de la fonction "lancePing"

lancePing "Ping Google" 8.8.8.8 "$fichSortie" # Lancer la fonction lancePing avec 3 paramètres
lancePing "Ping Orange" www.orange.fr "$fichSortie" # Lancer la fonction lancePing avec 3 autres paramètres

```

Le script ci-dessus fonctionne correctement sous `debian 8 (jessie)` **et** `debian 9 (stretch)`

---

<div class="post-metadata">

**Author:** ![domoticity](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domoticity](https://www.debian-fr.org/u/domoticity)\
**Post date:** [Février 24, 2019, 7:29 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/8 "2019-02-24T19:29:39Z")

</div>

Merci beaucoup, c’est fonctionnel au top 🙂

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 24, 2019, 9:11 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/9 "2019-02-24T21:11:37Z")

</div>

Merci pour le retour 😀

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Mars 20, 2019, 10:25 UTC](https://www.debian-fr.org/t/script-ping-pour-recuperer-resultats/78665/10 "2019-03-20T22:25:22Z")

</div>

regarde fping, il fera certainement directement ce que tu demande
