#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
dans quel langage ?
en bash
Hors ligne
#5 Le 18/06/2022, à 20:35
- MDBeaver
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.
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.
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
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
… 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
Dernière modification par MicP (Le 20/06/2022, à 18:19)
Hors ligne