Forum Linux.général Help !!! ping dans script

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
16
juin
2016

Bonjour,
Dans mon script ci-dessous, je souhaite (à la fin du script) afficher le récapitulatif des infos saisie et pinguer ces infos.
Pouvez-vous m'aider ? Je patine depuis qqjours.
Bonne journée.
Gab2grad

#!/bin/bash

echo "********************************************"
echo "*   SCRIPT DE PERSONNALISATION DU RESEAU   *"
echo "********************************************"

echo "******************************************"
echo "* MERCI DE REMPLIR LES CHAMPS CI-DESSOUS *"
echo "******************************************"


read -p "Adresse IP de la machine: " IPADDR
read -p "Masque de sous reseau: " NETMASK
read -p "Passerelle: " GATEWAY
read -p "DNS #1: " DNS1
read -p "DNS #2: " DNS2

echo "IPADDR=$IPADDR" >> /etc/sysconfig/network-scripts/ifcfg-ens192
echo "NETMASK=$NETMASK" >> /etc/sysconfig/network-scripts/ifcfg-ens192
echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-ens192
echo "GATEWAY=$GATEWAY" >> /etc/sysconfig/network
echo "nameserver $DNS1" >> /etc/resolv.conf
echo "nameserver $DNS2" >> /etc/resolv.conf

echo "CONFIRMEZ VOUS VOTRE SAISIE ? (OUI/NON)?"
select reponse in OUI NON
    do 
        case $reponse in 
        # réponse oui à la question
        "OUI") break;;

        # réponse non à la question
        "NON") 
            read -p "Adresse IP: " IPADDR
            read -p "Masque de sous reseau: " NETMASK
            read -p "Passerelle: " GATEWAY
            read -p "DNS #1: " DNS1
            read -p "DNS #2: " DNS2

            echo "IPADDR=$IPADDR" >> /etc/sysconfig/network-scripts/ifcfg-ens192
            echo "NETMASK=$NETMASK" >> /etc/sysconfig/network-scripts/ifcfg-ens192
            echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-ens192
            echo "GATEWAY=$GATEWAY" >> /etc/sysconfig/network
            echo "nameserver $DNS1" >> /etc/resolv.conf
            echo "nameserver $DNS2" >> /etc/resolv.conf
            echo "CONFIRMEZ VOUS VOTRE SAISIE ? (1 OUI /2 NON)?";;

        # Autres réponse à la question à la question
        "*") continue;;
    esac        
done
  • # Précisions

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

    Préliminaire: revoir la syntaxe wikiesque pour avoir le code propre

    Précision à apporter: qu'est-ce que «pinguer ces infos» ?

    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

    • [^] # Re: Précisions

      Posté par  . Évalué à 1.

      Bonjour et merci.
      Dans mon script, je saisie une @IP pour la carte réseau de la machine, puis la masque de sous réseau, puis la passerelle, le DN1 et le DNS2.
      Si je réponds, 2 (ou non), le script se relance avec la même demande (saisie de tous les champs).
      Si je réponds, 1 (ou oui), le script, le user sort du script.
      Je souhaiterais afficher (à la fin du script) les différentes adresses IP saisies ci-dessus et effectuer dans le script un ping de ces adresses là.
      Merci d'avance.

  • # Divers problèmes

    Posté par  . Évalué à 2.

    Salut,

    Déjà tant mieux de proposer un script à commenter, ça va aider.

    Que se passe-t'il si l'utilisateur répond une première fois non (la conf est faite…) ?

    Que se passe-t'il si l'utilisateur répond une deuxième fois non (on sort avec une conf mauvaise…) ?

    La logique est bancale.

    Ce qu'il faut faire, c'est (en pseudo_code) :

    tant que (vrai)
      lire_informations()
      afficher_récapitulatif()
      go <- demander_validation()
      si(go)
        ecrire_fichiers()
        sortir()
      fin si
    fin tant que
    

    Donc il faut remonter ta logique de boucle et redescendre ta logique d'écriture.

    A partir de ça, ça sera mieux.

    Matricule 23415

    • [^] # Re: Divers problèmes

      Posté par  . Évalué à 1.

      Bonjour et merci.
      Dans mon script, je saisie une @IP pour la carte réseau de la machine, puis la masque de sous réseau, puis la passerelle, le DN1 et le DNS2.
      Si je réponds, 2 (ou non), le script se relance avec la même demande (saisie de tous les champs), idem si je réponds de nouveau "non"..
      Si je réponds, 1 (ou oui), le user sort du script.
      Je souhaiterais afficher (à la fin du script) les différentes adresses IP saisies ci-dessus et effectuer dans le script un ping de ces adresses là.
      Merci d'avance.

      • [^] # Re: Divers problèmes

        Posté par  . Évalué à 2.

        Salut,

        Essaye de répondre deux fois non à ton script, tu y verra le problème de logique ;-)

        Car non, il ne se relance pas tout seul magiquement.

        Il ne devrait pas y avoir plusieurs fois les mêmes lignes demandant les infos. Il faut revoir la logique !

        Matricule 23415

        • [^] # Re: Divers problèmes

          Posté par  . Évalué à 1.

          En répondant non (choix 2) même plusieurs fois, la boucle se relance et la demande de saisie des @IP pour les différents champs est de nouveau demandée …

        • [^] # Re: Divers problèmes

          Posté par  . Évalué à 4.

          Car non, il ne se relance pas tout seul magiquement.

          C'est select qui se comporte comme une boucle

          • [^] # Re: Divers problèmes

            Posté par  . Évalué à 1.

            Salut,

            Oui, merci, j'ai vu un peu plus tard. :-)

            Il n'en reste pas moins que la logique est dans le mauvais sens !

            Matricule 23415

  • # je vais (peut-etre) dire une betise

    Posté par  . Évalué à 4.

    dans ton script, actuellement,

    tu demandes des infos,
    tu stockes les infos,
    puis tu demandes confirmation…

    comme tu ne fais qu'ajouter des infos,
    si la personne repond non…
    ben la configuration a deja été modifiée,
    et elle va ajouté encore des infos…

    ne vaudrait-il pas mieux :
    - demander les infos,
    - demander la validation
    - si oui => ecrire les infos (en remplacant les anciennes et non en ajoutant au fichier
    - si non => redemander les infos (ou demander l'annnulation)

    • [^] # Re: je vais (peut-etre) dire une betise

      Posté par  . Évalué à 0.

      Bonjour et merci.
      Dans mon script, je saisie une @IP pour la carte réseau de la machine, puis la masque de sous réseau, puis la passerelle, le DN1 et le DNS2.
      Si je réponds, 2 (ou non), le script se relance avec la même demande (saisie de tous les champs).
      Si je réponds, 1 (ou oui), le user sort du script.
      Je souhaiterais afficher (à la fin du script) les différentes adresses IP saisies ci-dessus et effectuer dans le script un ping de ces adresses là.
      Merci d'avance.

      • [^] # Re: je vais (peut-etre) dire une betise

        Posté par  . Évalué à 2.

        Ben pour afficher, vu que tu utilises déjà echo partout dans ton script tu sait faire, genre :

        echo "Adresse IP de la machine: $IPADDR

        Et pour le ping, en shell, c’est la sa force, toutes les commandes du système sont accessibles directement comme dans un terminal :

        ping -c1 $IPADDR

        Ou plus évolué :

        echo -n "Ping de l'IP $IPADDR..."
        ping -c1 $IPADDR &> /dev/null
        [ $? -eq 0 ] && echo "OK" || echo "ERREUR"
        • [^] # Re: je vais (peut-etre) dire une betise

          Posté par  . Évalué à 1.

          J'ai mis les 5 commandes ping à la fin du script
          A la fin de l'exécution du script, le ping se lance pour la 1ère @IP, puis on sort du script.
          Je souhaiterais afficher le résultat du 1ère ping, puis du 2e …, puis afficher un résumé des différentes adresses saisies.
          Merci.

          • [^] # Re: je vais (peut-etre) dire une betise

            Posté par  . Évalué à 2.

            une piste

            man ping dans un terminal, te donnera toutes les options dispos pour la commande ping.

            pour les compter, pour afficher un resumé, etc

            • [^] # Re: je vais (peut-etre) dire une betise

              Posté par  . Évalué à 1.

              Bonjour et merci pour ces précisions.
              Je teste et reviens vers vous.
              bonne journée.
              Laurent

              • [^] # Re: je vais (peut-etre) dire une betise

                Posté par  . Évalué à 1.

                Bonjour,
                Pas top pour la suite. J'ai mis les commandes ping à la fin.

                ping -c1 $IPADDR
                ping -c1 $NETMASK
                ping -c1 $GATEWAY
                ping -c1 $DNS1
                ping -c1 $DSN2

                Mais dès le ping du "sous réseau", je sors du script (exécuté avec un user "de base" sans droit root).

                Grrrr

                • [^] # Re: je vais (peut-etre) dire une betise

                  Posté par  . Évalué à 2.

                  Pinger un netmask n'a pas baucoup de sens et retournera toujours une erreur, mais ce n’est pas sensé interrompre ton script, sauf s'il y a un set -e qui traine quelque-part.

                  • [^] # Re: je vais (peut-etre) dire une betise

                    Posté par  . Évalué à 1.

                    Pas de set -e dans mon script.
                    En effet, pas de nécessité de pinger le masque de sous réseau.
                    Mais je sors immédiatement après le premier ping, celui de l'@IP de la carte …

                    • [^] # Re: je vais (peut-etre) dire une betise

                      Posté par  . Évalué à 2.

                      Mais je sors immédiatement après le premier ping, celui de l'@IP de la carte …

                      parceque ping envoie un signal de fin à ton script.
                      tu peux essayer de lancer un "sous shell" avec la syntaxe :
                      $(ping -c1 $ADDR)

                      • [^] # Re: je vais (peut-etre) dire une betise

                        Posté par  . Évalué à 1.

                        Faire un shell supplémentaire avec cette commande ou rajouter la syntaxe dans le shell principal ?
                        Merci.

                        • [^] # Re: je vais (peut-etre) dire une betise

                          Posté par  . Évalué à 1. Dernière modification le 29 juin 2016 à 16:44.

                          Je ne comprends pas pourquoi lancer ce sous SHELL ?

                          Mon script est le suivant :

                          #!/bin/bash
                          
                          echo "************************************************************"
                          echo "*   SCRIPT DE PERSONNALISATION DU RESEAU DE LA VM SAGES2   *"
                          echo "************************************************************"
                          
                          echo "******************************************"
                          echo "* MERCI DE REMPLIR LES CHAMPS CI-DESSOUS *"
                          echo "******************************************"
                          
                          
                          read -p "Adresse IP de la machine: " IPADDR
                          read -p "Masque de sous reseau: " NETMASK
                          read -p "Passerelle: " GATEWAY
                          read -p "DNS #1: " DNS1
                          read -p "DNS #2: " DNS2
                          
                          echo "IPADDR=$IPADDR" >> /etc/sysconfig/network-scripts/ifcfg-ens192
                          echo "NETMASK=$NETMASK" >> /etc/sysconfig/network-scripts/ifcfg-ens192
                          echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-ens192
                          echo "GATEWAY=$GATEWAY" >> /etc/sysconfig/network
                          echo "nameserver $DNS1" >> /etc/resolv.conf
                          echo "nameserver $DNS2" >> /etc/resolv.conf
                          
                          echo "CONFIRMEZ VOUS VOTRE SAISIE ? (OUI/NON)?"
                          select reponse in OUI NON
                              do 
                                  case $reponse in 
                                  # réponse oui à la question
                                  "OUI") break;;
                          
                                  # réponse non à la question
                                  "NON") 
                                      read -p "Adresse IP: " IPADDR
                                      read -p "Masque de sous reseau: " NETMASK
                                      read -p "Passerelle: " GATEWAY
                                      read -p "DNS #1: " DNS1
                                      read -p "DNS #2: " DNS2
                          
                                      echo "IPADDR=$IPADDR" >> /etc/sysconfig/network-scripts/ifcfg-ens192
                                      echo "NETMASK=$NETMASK" >> /etc/sysconfig/network-scripts/ifcfg-ens192
                                      echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-ens192
                                      echo "GATEWAY=$GATEWAY" >> /etc/sysconfig/network
                                      echo "nameserver $DNS1" >> /etc/resolv.conf
                                      echo "nameserver $DNS2" >> /etc/resolv.conf
                                      echo "CONFIRMEZ VOUS VOTRE SAISIE ? (1 OUI /2 NON)?";;
                          
                                  # Autres réponse à la question à la question
                                  "*") continue;;
                              esac        
                          done
                          
                          ping -c1 $IPADDR
                          $(ping -c1 $ADDR)
                          # ping -c1 $NETMASK
                          ping -c1 $GATEWAY
                          ping -c1 $DNS1
                          ping -c1 $DSN2
                          
                          # shutdown -r 0
                          
                          /usr/sbin/shutdown
                          
                          
                          # systemctl restart network

                          HELP !!! Je craque ? Merci.

                          • [^] # Re: je vais (peut-etre) dire une betise

                            Posté par  . Évalué à 2.

                            Je ne comprends pas pourquoi lancer ce sous SHELL ?

                            parceque ping envoie un signal de fin à ton script.

                            et dans ta nouvelle version de ton script, tu executes toujours ton ping avant le mien (avec le sous shell), donc le comportement reste le meme, TON ping sort du script avant d'avoir fait les suivants.

                            • [^] # Re: je vais (peut-etre) dire une betise

                              Posté par  . Évalué à 1.

                              Débutant script LINUX, j'ai du mal à comprendre ou interpréter ton post ci-dessus.
                              "Tu exécutes ton script avant le mien" ? Tu peux m'éclaircir ?
                              Comment dois-je m'y prendre pour sortir du ping @IP et enchainer avec un ping de la passerelle, puis des DNS …
                              Ton "sous SHELL" dans quelle partie de mon script doit-il être posté ? Que doit-il contenir ?
                              Je patauge …
                              Merci

                              • [^] # Re: je vais (peut-etre) dire une betise

                                Posté par  . Évalué à 2.

                                ton script execute le ping $IPADDR
                                ping fait un exit, ca quitte alors ton script et ne passe pas à la suite.

                                je t'ai proposé de changer cela en $(ping $IPADDR)
                                qui devrait lancer un sous-shell, faire le ping, quitter le sous shell, et revenir à la suite de ton script.

                                et toi tu laisses dans ton script

                                ping $IPADDR #=> ca va toujours quitter ici puisque c'est cette ligne qu'il faut changer par la suivante
                                $(ping $IPADDR)
                                • [^] # Re: je vais (peut-etre) dire une betise

                                  Posté par  . Évalué à 1.

                                  Bonjour,
                                  Désolé, mais je rentre de congés.
                                  Merci de votre réponse.
                                  Cela dit, j'ai de nouveau modifié le script, je ne sors plus mais le script reste bloqué et ne se ferme plus, et donc, pas de ping …
                                  Pouvez-vous m'éclaircir sur ce sujet ?
                                  Merci.

                                  • [^] # Re: je vais (peut-etre) dire une betise

                                    Posté par  . Évalué à 2.

                                    peut-etre parce que sous linux, un
                                    ping 1.2.3.4

                                    ne s'arrete jamais.

                                    si tu veux qu'il s'arrete apres N ping, il faut faire
                                    ping -c N 1.2.3.4

                                    si tu veux qu'il n'affiche que le resultat du ping tu peux ajouter l'option -q

                                    exemple : ping -q -c 3 1.2.3.4
                                    va pinguer 3 fois l'ip 1.2.3.4, terminer et afficher le resultat

                                    • [^] # Re: je vais (peut-etre) dire une betise

                                      Posté par  . Évalué à 1. Dernière modification le 05 août 2016 à 11:22.

                                      Je dois pinguer l'adresse IP précédemment saisie.
                                      Je dois rajouter la synthaxe suivante ?
                                      ping -q -c 3 $IPADDR

                                      Je désirerais aussi permettre à mon user TEST de démarrer le service réseau. On m'a parlé de /etc/sudoers.

                                      Des infos ? Merci.

Suivre le flux des commentaires

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