Tester si "$1" = une IP ? - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 22-05-2006 à 12:12:41
J'y connais rien en shell mais voici mon avis.
Une IP, c'est une serie de 4 nombres separes par des points et dont le dernier nombre est en fait un chiffre.
C'est comme ca, AMHA, que tu peux tester tes IP.
/!\ NOTE /!\
Je parle d'IPv4
Marsh Posté le 22-05-2006 à 14:48:48
Ouaip.... alors a mon avis 2 possibilités, ou tu trouve quelqu'un de fort en expression reguleriere etc, et il va te faire ca en une ligne.
soit tu fait une fonction pour verifier que c'est bien une IP.
dans cette fonction, a laquelle tu passe en parametre l'addresse bien sur. Puis tu recupere les 4 composants de l'ip v4 (avec un while apres un IFS="." par exemple, ou meme avec un cut -d "." -f 1 (puis 2, 3 4).
et a chaque fois tu verifie que c'est un nombre.
Bref, y a de quoi s'amuser avec une fonction bash de quelques lignes.
Sinon encore une fois, ca doit pouvoir se faire en une ligne avec en utilisant les regexpr, mais la je sais pas faire.
Marsh Posté le 22-05-2006 à 15:15:13
l'expression régulière en une ligne existe, elle a été donné sur prog et elle doit etre sur le net...
Marsh Posté le 22-05-2006 à 16:45:15
Merci pour les réponses.
Bien, voici un résultat, qui fonctionne sous certaines machines red hat, mais pas sous la kubuntu 5.10, et je souhaiterais en connaître la cause.
Code :
|
Quand vous tappez "script a.b.c.d" par exemple, il renvoit l'IP comme valide !!!
Si vous virez la boucle "for", et que vous remplacez "$octet$i" par "$octet1", il teste le premier correctement.
Mais où est le problème ?
Marsh Posté le 22-05-2006 à 16:48:01
Heu... j'ai pas tout lu dans le detail mais...
Un truc qui me choque quand meme, il sont ou les "exit" ??
Une fonction tu dois la terminer par exit 0 ou exit 1
Donc tu peux laisser les "echo" pour suivre le deroulement du truc
(ce serait plus parlant en mettant vrai ou faux) mais faux bien faire un
exit deriere en consequence !
Marsh Posté le 22-05-2006 à 17:08:06
Je ne pense pas que cela soit nécessaire, mais j'ai effectué les modifications, et ça ne change pas les données du problème. J'en suis a me dire que c'est un pb dû à Kubuntu, et non au script. Ce soir, j'installe une OpenSuse pour tester, tiens !
En tout cas, une chose est sûre, je n'aime pas du tout la manière de "structurer" en shell.
On dirait que ça vient d'un autre âge.
Le if...fi, case...esac, etc.
Et la boucle for... je m'attendais à un truc style :
for (i=1,i<5,i++){ instructions }
ben... non.
Et tout est à l'avenant, avec les "-ge" plutôt que les conventionnels "<=", la déclaration de variable inexistante (var nombre:Number = 25), les array n'en parlons pas, etc. M'enfin, je m'énerve, là... la frustration...
Marsh Posté le 23-05-2006 à 09:58:09
Heu.. en fait.. tu as oublié de preciser le shell a utiliser.
la toute premiere ligne de ton script doit resembler à :
#!/bin/bash
Marsh Posté le 23-05-2006 à 11:20:34
Code :
|
Marsh Posté le 23-05-2006 à 13:49:27
M300A a écrit :
|
je suis pas sur que ton code fonctionne car on peut se retrouver avec une adresse 352.254.998.456.
si ça peut aider je l'ai fait en perl, mais ça doit pourvoir etre utilisable avec awk
Code :
|
c'est tres tres bourrin mais ça fonctionne bien ( enfin dans mes souvenirs ça fait + d'un an que je n'y ai plus touché ... )
Marsh Posté le 24-05-2006 à 16:02:16
Merci,
Je ne connais pas le principe des expressions régulières, je ne sais pas comment les utiliser. J'ai donc fignolé la détection d'erreur IPv4 de manière classique (je n'ai que trés peu de bases en scripts shell), et ça fonctionne maintenant.
Voici le code pour celui que ça intéresse :
Code :
|
Bon, maintenant que la vérification d'IP passé en paramètre est faite, que mon menu de choix est réalisé, il ne me reste plus que la fonction de mesure de performance réseau à scripter. Ouf, j'en vois le bout...
Marsh Posté le 24-05-2006 à 20:12:15
witjet a écrit : je suis pas sur que ton code fonctionne car on peut se retrouver avec une adresse 352.254.998.456.
|
C'est exact mais bon... C'est surtout pour eviter les erreurs de frappes
Marsh Posté le 31-05-2006 à 14:53:40
J'ai eu la réponse sur un autre forum (linux), d'un gars qui visiblement maîtrise bien les expressions régulières (ça reste abscon, pour moi). Je vous en fait part, ça peut toujours intérresser du monde :
Code :
|
Bonne journée.
Marsh Posté le 03-01-2018 à 14:46:53
Je déterre un peu mais toujours d'actualité en 2018 et vraiment très utile.
Perso je l'utilise sous cette forme en Ksh.
read $IP_CIBLE
if [ ! -z $IP_CIBLE ] && [[ `echo $IP_CIBLE | /usr/xpg4/bin/grep -E '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-4]|2[0-4][0-9]|[01]?[1-9][0-9]?)$'` = $IP_CIBLE ]]
then
echo "Format d'ip Correct"
else echo " Format incorrect"
fi
Marsh Posté le 03-01-2018 à 15:28:03
beau déterrage, sinon on peut aussi utiliser ipcalc avec -4 -c comme options.
Marsh Posté le 07-01-2018 à 08:38:25
il est inutile d'utiliser grep entre [[ alors qu'un opérateur testant les regex y est disponible !
Code :
|
Marsh Posté le 22-05-2006 à 12:08:33
Bonjour,
Je réalise un premier script shell BASH, et je cherche à tester si un paramètre est bien une adresse IP. Seulement, je n'ai aucune idée de la manière de procéder. Mon script attend en "$1" une IP, et le reste du script ne fonctionnera pas (utilisation de ping et FTP) s'il ne s'agit pas d'une adresse IP (si on entre n'importe quoi en 2nd paramètre).
Pour l'instant, voilà l'embryon :
Là, ça fait juste un test simple pour savoir si un paramètre est bien passé lors de l'éxécution du script.
Exemples :
- "./test" donnera "veuillez entrer l'IP du serveur FTP"
- "./test 192.168.0.1" donnera "pass"
- "./test 22" donnera aussi "pass" (mais ce sera inexploitable).
Je souhaiterais donc savoir comment créer une fonction qui me permette de détecter s'il s'agit bien d'un adresse IP passé en paramètre "$1".
Merci.