Expressions regulieres

cachouCacharel Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

SVP j'aimerais faire un controle sur une valeur d'adresse IP a entrer en utilisant les expressions regulieres. j'aimerais que l'adresse entree puisse repondre a un format bien precis par exemple 172.10.X.X et j'aimerai au niveau du 3eme octet specifier un certain nombre de sous-reseaux. par exemple 10, 20 et 76 uniquement. donc 172.22.10/20/76.X avec 0<X<255

voila ce que j'ai utilise

echo " Veuillez entrer l'adresse IP"
read adresse_IP
while [[ $adresse_IP != 172\.22\.[10,20,76]\.[0-2][0-5][0-4] ]]
do
echo " Vous avez entre une adresse IP non valide, veuillez ressaisir"
read adresse_IP
done

ca ne marche pas. vouspouvez m'aider SVP???

3 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    autre méthode
    echo " Veuillez entrer l'adresse IP"   
    read adresse_IP   
    declare -A a ; for x in 172.22.{10,20,76}.{0..255}; do a[$x]=999;done 
    while [[ -z "${a[$adresse_IP]}" ]]   
    do   
    echo " Vous avez entre une adresse IP non valide, veuillez ressaisir"   
    read adresse_IP   
    done   
    
    1
    1. Utilisateur anonyme
       
      il me semble, que, pour construire le tableau, une boucle for est plus rapide, non?
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      effectivement, et nettement
      j'ai modifié
      0
  2. cachouCacharel Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     
    SOS...j'ai besoin de votre aide je en prie!!!!
    0
  3. Utilisateur anonyme
     
    salut,

    tu mélanges les regex et les globs!
    seul =~ teste les regex.

    tu ne peux pas tester l'adresse machine comme tu le fais, car la machine 159 ne sera pas valider puisque 9 est supérieur à [0-4]

    je testerais chaque partie de l'adresse (c'est laborieux, je sais :()
    en bash:
    read -p'entrez une adresse : ' ip
    IFS='.' read re zo sub ma <<<"$ip"
    if [ $re.$zo = 172.22 ]
    then
       if [[ $sub = @(10|20|76) ]]
       then
          if [ $ma -lt 255 ]
          then
    etc
    0