IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Imposer un caractère dans une variable url après vérification


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 13
    Par défaut Imposer un caractère dans une variable url après vérification
    Bonjour,
    j'ai une variable $1 qui est un argument passé pendant l'exécution de mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #./script.sh <a href="http://www.url.com" target="_blank">www.url.com</a> /
    je dois vérifier que $ est sous forme http ou https :// fqdn
    j'utilise une regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if [[ "$1" =~ ^(http|https)://[a-z0-9\/]+* ]];then
    .

    j'aimerais imposer un "/" à la fin de $ = (url)
    j'ai tenté d'écrire ma regex différente manière notamment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if [[ "$1" =~ ^(http|https)://[a-z0-9\/]+* \/]];then
    ca ne marche pas auriez vous une idée ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut,

    tu as des caractères inutiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(http|https)://[a-z0-9/]+
    pas besoin du * car tu utilises + et pas besoin d’échapper /

    EDIT : et tu ne prends pas en compte les . !!!
    il détecte juste que le début est vrai, tu veux tester toute l'expression pas simplement une partie, il faut utiliser $
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(http|https)://[a-z0-9/.]+/$

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Bonjour

    "l'imposer", ça veut dire quoi ? Tu ajoutes toi-même l'oblique ? Ou alors tu rejettes un utilisateur qui n'a pas mis l'oblique ?

    Ensuite, si tu tapes la commande comme elle est dans le commentaire, cela ne marchera pas. Le premier argument ne sera même pas <a, car il sera pris pour une redirection. Il va falloir protéger tout ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./script.sh '<a href="http://www.url.com" target="_blank">www.url.com</a> /'
    Donc interdiction de mettre une apostrophe ' entre les 'simple quotes' de protection.

    Enfin, une proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ if [[ $1 =~ ^.*http(:|s:).* ]];then echo OK;fi
    OK

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 13
    Par défaut
    Bonjour merci pour vos réponses
    Non je veux que l'oblique soit mise à la fin
    Ma variable $1 est "l'argument" + Un composant numérique est généré le tout doit obligatoirement finir avec un ""/""
    le tout étant une URL => "$1=l'argument+code generé/"
    j'aimerais checker $1 pourqu'elle soit verifier comme cela: (http:// ou https :// fqdn + composant numerique et / à la fin )

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Ah! Au temps pour moi. J'avais oublié l'oblique de fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ $1 =~ ^.*http(:|s:)//[^\ ]*/$ ]];then echo OK;fi

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 13
    Par défaut Merci
    Donc la [^\ ] impose le /finale ? Ou le */$?
    Je veux continuer le traitement de la variable
    Et mettre un écho si c'est pas bon

  7. #7
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    [^\ ] : Tout caractère autre qu'un espace
    [^\ ]* :Suite de caractère ne contenant pas d'espace
    /$ : Le dernier caractère est /

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 13
    Par défaut j'ai un code erreur
    Qu'est-ce que je fais de mal ?

    Quand je lance mon script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./check_url.sh https://monsite.com
    avec le CODE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if [[ "$1" =~ ^(http|https)://[a-z0-9\/]+*/$ ]];then
    ret=$(curl -I -s "$1/test.php?$genrationcode&/" -o /dev/null -w '%{http_code}\n')       # => ici je teste le code retour 200 OK  301 redirection etc ...
    j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ./check_url.sh: ligne 84: erreur de syntaxe près du symbole inattendu « ( »
    ./check_url.sh: ligne 84: ` ret=$1(curl -I -s "$1/test.php?$generationcode&/" -o /dev/null -w '%{http_code}\n')'

    si je l'écris comme cela :
    CODE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if [[ "$1" =~ ^(http|https)://[a-z0-9\/]+*] ];then
    ret=$(curl -I -s "$1/test.php?$genrationcode& /" -o /dev/null -w '%{http_code}\n') 
    ++ curl -I -s 'https://www.monsite.com/test.php?43442&/' -o /dev/null -w '%{http_code}\n'
    + ret=200
    + '[' 200 == 200 ']'
    + returncode=0
    + returnmsg='OK - ...'
    + echo OK - ...
    OK - ...
    + exit 0
    Mais du coup j'ai pas mon / final d'imposé :-(

  9. #9
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Plusieurs choses m'étonnent.
    • Sais-tu que les URL n'ont jamais d'espace ?
    • Sais-tu que dans une regex, + ou * sont des quantificateurs de l'objet directement à leur gauche ? Il ne faut pas confondre avec les caractères joker. cf 9\/]+*
    • Dans ton message d'erreur, on voit qu'un "1" s'est glissé entre "$" et "("

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 13
    Par défaut
    mon script test un site qui a des répertoires /magasin
    /catalogue
    j'ai donc déclaré une $fonction qui defini le nombre de répertoires et leur noms
    du coup quand tu lance le script
    "./$fonction script.sh https://monsite.com magasin "
    je pense que c'est à cause de cette fonction que j'ai besoins de "*"
    je fais des echo a chaque etape pour verifier mes variables et je perds ma variable "sans laison " si j'ajoutes """/$""" à la regex ou je souhaite qu'elle impose un /final à mon url

    ./script.sh https://monsite.com catalogue
    sans la moficiation : curl -I -s 'https://www.monsite.com/test.php?12345&/' -o /dev/null -w '%{http_code}\n'
    ca marche !
    mais c'est mon curl qui ajoute le / j'aimerais que ce soit la regex :-)

  11. #11
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    mais c'est mon curl qui ajoute le / j'aimerais que ce soit la regex :-)
    Une expression rationnelle (= regular expression = regex) ne sert qu'à comparer. Elle n'ajoutera jamais rien.

    Tu te fais des nœuds au cerveau. Ce que tu fais est trop compliqué. Tu veux récupérer des infos sur une page html ? C'est beaucoup plus simple.

    Voilà comment je ferais à ta place :
    En brut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    c=$1 # on va travailler l'entrée
    c=${c%/} # on enlève l'oblique si elle existe
    c=$c/ # on ajoute l'oblique, toujours.
     
    for d in catalogue magasin
    do
            echo wget -q -O - $c$d/
    done
    Alimenté par un fichier contenant le nom des dossiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read ligne
    do
        # Comme ci-dessus
    done < fichier_dossiers.txt
    Puis on traite la sortie dans une conduite (pipe).

    La sortie du premier exemple donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wget -q -O - http://url.com/catalogue/
    wget -q -O - http://url.com/magasin/
    N'est-ce pas plus simple ?

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 13
    Par défaut
    Merci de ta réponse
    si c'est plus simple mais cela ne réponds pas a mon besoins :-)

    si la regex ne peux imposer une caractere est il possible de verifier que le dernier caractere soit obligatoirement un " / " ? dans ce cas quel syntaxe utiliser ?

  13. #13
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Sens toi libre de lire, relire, re-relire la discussion jusqu'à ce que tu la comprennes. Car là, tu es revenu au point de départ, cher ami.

    • Soit tu veux corriger l'entrée, quoique soumette l'utilisateur maladroit, et dans ce cas là tu as un exemple avec la modification de $c.
    • Soit tu veux débouter l'utilisateur qui a oublié l'oblique et tu as un exemple aussi.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 13
    Par défaut
    si je veux débouter cette option conviens bien mais dans tout ce que j'ai essayer rien ne match

  15. #15
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Citation Envoyé par medux Voir le message
    si je veux débouter cette option conviens bien mais dans tout ce que j'ai essayer rien ne match
    Et bien il faut débuguer ! Courage !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $ cat check_url.bash
    #!/bin/bash
    
    if [[ $1 =~ ^.*http(:|s:)//[^\ ]*/$  ]]
    then
            echo Suite du script
    else
            echo Vous avez oublié l\'oblique de fin
            exit 123
    fi
    exit 0
    $ ./check_url.bash http://www.monsite.com
    Vous avez oublié l'oblique de fin
    $ echo $?
    123
    $ ./check_url.bash http://www.monsite.com/
    Suite du script
    $ echo $?
    0
    Comme tu le vois ci-dessus, cela marche très bien chez les autres. Au boulot !

  16. #16
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 691
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 691
    Par défaut
    voilà! quand les gens ne font pas leur boulot, Flo les renvoie à leur pupitre.
    là, je m'y retrouve.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  17. #17
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut, en gros, dés la 1ere réponse, tu avais ce qu'il te fallait :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if [[ $1 =~ ^(http|https)://[a-z0-9/.]+/$ ]]
    then
        echo "Suite du script"
    else
        echo "Vous avez oublié l'oblique de fin"
    fi

  18. #18
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 13
    Par défaut
    Merci @tous ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 04/04/2011, 12h04
  2. recuperation un certain nombre de caractere dans une variable
    Par vince2005 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 22/12/2010, 16h12
  3. [MySQL] Récupérer une chaine de caractere dans une variable
    Par Mais.Ouais dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 26/05/2009, 12h41
  4. caractere "<" dans une variable
    Par libuma dans le forum Langage
    Réponses: 13
    Dernier message: 04/06/2008, 22h55
  5. stocker chaîne de caracteres dans une variable
    Par coachbob44 dans le forum Langage
    Réponses: 2
    Dernier message: 11/01/2007, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo