Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/06/2022, à 18:11

MDBeaver

Validation saisie IP et affichage

Bonjour à tous,

J'ai encore besoin de votre aide. Je cherche un moyen de saisir une IP au clavier et a fur et à mesure de la saisie l'affichage de l'IP passe du rouge au vert lorsque l'IP est une IP correcte.
Je butte sur deux points :
- j'aimerais valider les IP dans la plage 1.0.0.0 à 223.255.255.255 et je ne trouve pas de regex qui satisfasse à cette plage d'adresse
- l'affichage ne passe en vert que lorsque je valide l'IP avec la touche enter

ip=""
i=0
until [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]
	do
		if [[ $i == 1 ]] ; then
			i=0
			printf '\033[1;37;40m'
			printf '\033[1A'
 			printf '\033[0J'
 			ip=""
		fi
		echo "adresse IP : "
		printf '\033[1;41;30m'
		printf '\033[1A'
		printf '\033[13C'
		read ip
		i=1
	done
printf '\033[1A'
printf '\033[13C'
printf '\033[1;37;42m'
echo $ip
printf '\033[1;37;40m'

Y a t-il un moyen de parvenir à mes fins ? Quelqu'un peux t'il m'aider dans ma recherche ?

Merci à vous

Hors ligne

#2 Le 18/06/2022, à 18:19

jplemoine

Re : Validation saisie IP et affichage

dans quel langage ?


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Déconnecté jusqu’à nouvel ordre

Hors ligne

#3 Le 18/06/2022, à 18:54

Watael

Re : Validation saisie IP et affichage

salut,

pour la regex, tu la trouveras sur internet, tu n'es pas le premier à te poser la question.
ce n'est pas aussi simple qu'il y paraît.

pour la nécessité d'appuyer sur Enter, c'est le fonctionnement normal de read.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 18/06/2022, à 20:26

MDBeaver

Re : Validation saisie IP et affichage

jplemoine a écrit :

dans quel langage ?

en bash

Hors ligne

#5 Le 18/06/2022, à 20:35

MDBeaver

Re : Validation saisie IP et affichage

Watael a écrit :

salut,

pour la regex, tu la trouveras sur internet, tu n'es pas le premier à te poser la question.
ce n'est pas aussi simple qu'il y paraît.

pour la nécessité d'appuyer sur Enter, c'est le fonctionnement normal de read.

pour la regex j'ai effectivement fait de nombreuses recherches sur internet comme tu le suggère mais aucune des regex trouvées ne me permet de ne valider les IP comme je le souhaite. J'ai bien tenté de les modifier mais à chaque fois que je touche au but, la dernière partie de la validation dérègle tout. Je vais donc poursuivre mes recherches et mes tests.

Y a t-il un autre méthode pour parvenir a ce que j'essaye de faire, une autre commande que read ?

Merci de votre aide

Dernière modification par MDBeaver (Le 19/06/2022, à 12:22)

Hors ligne

#6 Le 19/06/2022, à 03:29

Watael

Re : Validation saisie IP et affichage

tu pourrais "découper" l'IP en quatre parties, et tester chacune selon les limites que tu souhaites.

until (( (1<=${ip[0]} && ${ip[0]}<=233) && (0<=${ip[1]} && ${ip[1]}<=255) && (0<=${ip[2]} && ${ip[2]}<=255) && (0<=${ip[3]} && ${ip[3]}<=255) )) 2>/dev/null
do
	read ip
	ip=( $(IFS='.';echo $ip) )
done
echo "$(IFS='.'; echo "${ip[*]}")"

pour read, a priori, c'est la seule commande disponible, que je sache, pour lire une entrée.

Dernière modification par Watael (Le 19/06/2022, à 03:32)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 20/06/2022, à 06:12

MicP

Re : Validation saisie IP et affichage

Bonjour

J'ai gribouillé ce modeste petit script :

#!/bin/bash

recupOctet() {
    octet=''
    until [[ "$octet" =~ ^[0-9]{1,3}$ ]] && (( octet >= mini )) && (( octet <= maxi ))
    do
        echo -e $escSeq"Entrez une valeur entre $mini et $maxi"
        read -p "$ip" octet
    done
    ip="${ip}${octet}."
}

escSeq=$'\033[A\033[2K\033[A'   # gestion curseur et effacements
echo -e "\n"

# Premier octet
mini=1; maxi=223
recupOctet

# Les 3 octets suivants
mini=0; maxi=255
for i in 2 3 4; do
    recupOctet
done

ip="${ip::-1}"  # Pour enlever le dernier caractère point

Dernière modification par MicP (Le 20/06/2022, à 10:29)

Hors ligne

#8 Le 20/06/2022, à 15:16

Watael

Re : Validation saisie IP et affichage

ip="${ip}${octet}."-> ip=$ip.$octet, et on n'a plus besoin d'enlever le dernier point. smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 20/06/2022, à 16:06

MicP

Re : Validation saisie IP et affichage

Oui, mais alors il faudra enlever le premier

Hors ligne

#10 Le 20/06/2022, à 16:09

Watael

Re : Validation saisie IP et affichage

oui, je viens de m'en apercevoir, mais j'ai la parade !

ip=${ip:+$ip.}$octet

big_smile

Dernière modification par Watael (Le 20/06/2022, à 16:10)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 20/06/2022, à 16:44

LeoMajor

Re : Validation saisie IP et affichage

salut,  je ne vois pas trop l'intérêt du script... vision comptable ?! 

read -rp "ip ? " ip; awk -v ii="$ip" 'BEGIN{nf=split(ii,i,"."); if(nf!=4){print "erreur"; exit}; if(i[1]>=1 && i[1]<=223 && i[2]<=255 && i[3]<=255 && i[4]<=255){print ii, "ok"}else{print "invalide"} }'
gbs3 -e "dim ip as string: print \"ip ? \": input ip: dim i as integer[]=scan(ip,\"*.*.*.*\"): if i[0]>=1 and i[0]<=223 and i[1]<=255 and i[2]<=255 and i[3]<=255 then print ip,\"valide\" else print \"invalide\": catch: print \"erreur\""

Hors ligne

#12 Le 20/06/2022, à 16:57

Watael

Re : Validation saisie IP et affichage

je ne connais pas gbs3, et je ne le trouve pas les dépôts. c'est quoi ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 20/06/2022, à 17:13

LeoMajor

Re : Validation saisie IP et affichage

gambas3, une sorte de vba, vb.net, à la sauce nunux.

Hors ligne

#14 Le 20/06/2022, à 18:08

MicP

Re : Validation saisie IP et affichage

LeoMajor a écrit :

… je ne vois pas trop l'intérêt du script... vision comptable ?!

Je ne sais pas ce qu'est une "vision comptable".

=======
Le script que je propose n'utilise aucune commande externe,
il n'utilise que le shell bash <=> celui utilisé par défaut pour Ubuntu, debian, et d'autres…

Il affiche la valeur de chacun des octets en cours de saisie
et efface la valeur de l'octet saisie si elle ne correspond pas aux limites imposées afin de permettre à l'utilisateur d'en entrer une autre
plutôt que d'avoir à attendre d'avoir saisi une adresse ip complète avant de pouvoir constater qu'elle n'est pas dans les limites imposées
et d'avoir à en ré-entrer entièrement une autre jusqu'à ce qu'elle remplisse les conditions imposées.

Bien sûr, j'aurais pu faire de ce script une seule ligne de commandes,
mais c'est bien plus facile à modifier si les limites imposées devaient être modifiées un jour.

=======
Ce n'est pas évident de pouvoir imaginer ce que ça donne sans l'avoir testé,
alors essayez-le wink

Dernière modification par MicP (Le 20/06/2022, à 18:19)

Hors ligne