Expressions regulieres

Fermé
cachouCacharel Messages postés 12 Date d'inscription lundi 27 août 2012 Statut Membre Dernière intervention 22 janvier 2014 - 28 août 2012 à 10:52
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 - 28 août 2012 à 16:26
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

dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
Modifié par dubcek le 28/08/2012 à 16:27
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
Utilisateur anonyme
28 août 2012 à 16:15
il me semble, que, pour construire le tableau, une boucle for est plus rapide, non?
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
Modifié par dubcek le 28/08/2012 à 16:27
effectivement, et nettement
j'ai modifié
0
cachouCacharel Messages postés 12 Date d'inscription lundi 27 août 2012 Statut Membre Dernière intervention 22 janvier 2014
28 août 2012 à 11:50
SOS...j'ai besoin de votre aide je en prie!!!!
0
Utilisateur anonyme
28 août 2012 à 13:43
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