Expressions regulieres

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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. il me semble, que, pour construire le tableau, une boucle for est plus rapide, non?
    2. Contributeur
      effectivement, et nettement
      j'ai modifié
  2. 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