Forum Programmation.shell et logique ?

Posté par  .
Étiquettes : aucune
0
23
mar.
2005
Salut

je continue avec mes scripts :-)

J'ai dans une variable une adresse ip et le mask associé. Les deux ont été prises avec ifconfig, plus un grep plus des cut.

Maintenant je voudrais calculer l'adresse du sous réseau.Il faudrait faire un et logique en binaire pour l'avoir mais j'ai essayé typeset -i2 pour essayer de passer mes variables en binaire mais ça n'a pas marché...Des idées ??

Remarque : Si quelqu'un connais une commande pour l'avoir je suis prennant.
  • # Un autre language au menu...

    Posté par  . Évalué à -1.

    Salut,

    tu pourrais implémenter du c dans ton script, ou même mieux utiliser le perl.

    A toide voir, car je pense que tu arrives aux limites d'un language, et dans ce cas, il faut savoir jongler ;-)
  • # en bash

    Posté par  . Évalué à 6.

    tu devrais pouvoir faire un et binaire avec une expression du style :

    $(( ${VAR1} & ${VARB} ))
    ou
    $[ ${VAR1} & ${VAR2} ]


    exemple: echo $[ 7 & 3 ]
    Pour plus d'info, consulte la section CALCUL ARITHMÉTIQUE de la page du manuel de bash.

    bon scripts ;)
    • [^] # Re: en bash

      Posté par  . Évalué à 3.

      Merci beaucou !!

      j'ai reussi à faire le & logique entre les 4 membres de l'ip et du mask et je retrouve forcement l'ip du sous réseau !! MECI :-)

      en fait c'est dans un client qui se connecte à un serveur et qui doit lui donner la route et quand c'est automatique c'est bcp mieux pour les utilisateur !
      • [^] # Re: en bash

        Posté par  . Évalué à 2.

        et ca ne serait pas une bonne idée de nous montrer ton code ?
        on ne sait jamais ca peux servir a quelqu'un...

        d'avance merci.
        • [^] # Re: en bash

          Posté par  . Évalué à 2.

          Ok, j'avais même pas pensé car je me suis dis que c'était dur car je ne connais rien aux script mais pas forcement interesant quand on connais un peu. En tout cas voici les lignes pour recuperer l'adresse du réseau associé à un ip et le mask :

          mask=`ifconfig eth0|grep Masque|cut -d ':' -f4`
          echo $mask
          mask1=`ifconfig eth0|grep Masque|cut -d ':' -f4|cut -d '.' -f1`
          mask2=`ifconfig eth0|grep Masque|cut -d ':' -f4|cut -d '.' -f2`
          mask3=`ifconfig eth0|grep Masque|cut -d ':' -f4|cut -d '.' -f3`
          mask4=`ifconfig eth0|grep Masque|cut -d ':' -f4|cut -d '.' -f4`

          ip=`ifconfig eth0|grep Masque|cut -d ':' -f2|cut -d ' ' -f1`
          echo $ip
          ip1=`ifconfig eth0|grep Masque|cut -d ':' -f2|cut -d '.' -f1`
          ip2=`ifconfig eth0|grep Masque|cut -d ':' -f2|cut -d '.' -f2`
          ip3=`ifconfig eth0|grep Masque|cut -d ':' -f2|cut -d '.' -f3`
          ip4=`ifconfig eth0|grep Masque|cut -d ':' -f2|cut -d '.' -f4|cut -d ' ' -f1`

          ip_res=$[${mask1} & ${ip1}]"."$[${mask2} & ${ip2}]"."$[${mask3} & ${ip3}]"."$[${mask4} & ${ip4}]
          echo $ip_res
  • # Re:

    Posté par  . Évalué à 4.

    A noter qu'au lieu d'utiliser grep et cut pour ce que tu fais, il vaut mieux utiliser des syntaxes internes à bash.

    Pour un petit script, c'est pas très grave, mais il vaut mieux prendre des habitudes.

    Par exemple (il y a beaucoup d'autres solutions) :


    adresseip="127.0.0.1";
    IFS=' ' read ip3 ip2 ip1 ip0 <<EOF
    $(IFS='.'; echo $adresseip)
    EOF
    echo "Voilà l'adresse IP: $ip3.$ip2.$ip1.$ip0";


    ça peut normalement se faire avec une structure du type read <(IFS=. echo $ans), mais je n'ai pas réussi à le faire marcher.

    Sinon, dans le même esprit que grep et cut, tu peux utiliser les syntaxe ${adresseip#.} et ${adresseip%.}. Voir la page man de bash (si tu utilises bash) pour plus de détails.
  • # ipcalc

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

    sous Debian on a un package ipcalc qui a mon avis sert a faire ce que tu veux ...

    sinon, tu peux utiliser awk pour reformatter ton IP en entree, et faire des calculs simples dessus; le probleme est que les entiers BASH n est peut etre pas 32 bits ...

    sinon, tu peux essayer apres awk un script 'bc' ... bc sert a faire des calculs mathematiques ... et lui il pourra manipuler des grans nombres ... meme des 128 si t est en v6.

Suivre le flux des commentaires

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