Bash, valider le format d'une variable comme FQDN
Résolu
Exileur
Messages postés
1621
Date d'inscription
Statut
Membre
Dernière intervention
-
Exileur Messages postés 1621 Date d'inscription Statut Membre Dernière intervention -
Exileur Messages postés 1621 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila la problématique, je demande a un utilisateur d'indiquer un FQDN, que je vais par la suite manipuler.
Je souhaite avant tout vérifier que l'entrée de l'utilisateur à un format valide.
J'ai trouvé la fonction suivante sur internet :
Sauf que ça me retourne une erreur : grep: Support for the -P option is not compiled into this --disable-perl-regexp binary
Du coup, temporairement j'ai écris une fonction à l'arrache :
Sauf que ducoup j'ai tout un tas de domaine qui vont pas passer.
Quelqu'un as-til une solution alternative ?
Sachant que je ne peux pas installer de packet, (host est pas présent), et que c'est du bash 3.2 ?
Merci à vous :)
--
N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.
Voila la problématique, je demande a un utilisateur d'indiquer un FQDN, que je vais par la suite manipuler.
Je souhaite avant tout vérifier que l'entrée de l'utilisateur à un format valide.
J'ai trouvé la fonction suivante sur internet :
#function check_fqdn
#{
# echo "$1" | grep -P '(?=^.{1,254}$)(^(?>(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)'
# return $!
#}
Sauf que ça me retourne une erreur : grep: Support for the -P option is not compiled into this --disable-perl-regexp binary
Du coup, temporairement j'ai écris une fonction à l'arrache :
function check_fqdn
{
local entry=""
if [ "$(echo $1 | grep -o '\.' | wc -l)" -lt 1 ]; then
return 1;
elif [ "$(echo $1 | tr '.' ' ' | wc -w)" -lt 2 ]; then
return 1;
else
#totalCount=$(echo $1 | tr '.' ' ' | wc -w)
#count=0
for entry in $(echo $1 | tr '.' ' '); do
if ! [[ $entry =~ ^[A-Za-z0-9\_\-]+$ ]]; then
return 1;
elif [[ ${#entry} -lt 2 || ${#entry} -gt 16 ]]; then
return 1;
fi
#((count++))
done
fi
return 0;
}
Sauf que ducoup j'ai tout un tas de domaine qui vont pas passer.
Quelqu'un as-til une solution alternative ?
Sachant que je ne peux pas installer de packet, (host est pas présent), et que c'est du bash 3.2 ?
Merci à vous :)
--
N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.
2 réponses
-
Salut,
Tu es sur quel système ?
Est-ce que Perl est installé ?
-
salut,
« j'ai tout un tas de domaine qui vont pas passer. »
par exemple...?
tu utilises trop de commandes externes : le Remplacement des paramètres permet de faire ce dont tu as besoin. par exemple :fqdn='commentcamarche.net'
for i in ${fqdn//./ }; do echo "$i"; done