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

Linux Discussion :

Récupérer une chaîne pour traitement


Sujet :

Linux

  1. #1
    Membre régulier Avatar de loopback
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 170
    Points : 113
    Points
    113
    Par défaut Récupérer une chaîne pour traitement
    Salut,
    voilà j'essai vainement de créer un simple script bash qui vérifie si le nom de l'utilisateur existe dans le fichier /etc/passwd si oui alors il continue à lancer le script et sinon il s'arrête mais je n'y arrive pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/sh
    #
     
    echo -n "Nom de votre utilisateur? : "
    read USER
     
    VERIF=`grep $USER /etc/passwd | cut -d: -f1`
    if [ ! -e "$VERIF" ]; then
    echo "L'utilisateur $USER n'existe pas, vous devez d'abord le créer!!"
    else [ -e "$VERIF" ];
    echo "L'utilisateur $USER existe bien...lancement du script..."
    [...]
    Voilà, si quelqu'un a une idée....car je ne sais pas si c'est bien la commande qu'il faut pour tester si la valeur est vrai ou fausse.

  2. #2
    Membre régulier Avatar de loopback
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 170
    Points : 113
    Points
    113
    Par défaut
    Bon je me répond à moi même:
    j'ia tester ceci et ça à l'aire de marcher mais j'aimerais votre avis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash
    #
     
    echo -n "Nom de votre utilisateur? : "
    read USER
     
    VERIF=`grep $USER /etc/passwd | cut -d: -f1`
    if [[ ! "$VERIF" ]]; then
    echo "L'utilisateur $USER n'existe pas, vous devez d'abord le créer!!"
    exit 1
    else 
    echo "L'utilisateur $USER existe bien...lancement du script..."
    fi

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par loopback Voir le message
    Salut,
    voilà j'essai vainement de créer un simple script bash qui vérifie si le nom de l'utilisateur existe dans le fichier /etc/passwd si oui alors il continue à lancer le script et sinon il s'arrête mais je n'y arrive pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/sh
    #
     
    echo -n "Nom de votre utilisateur? : "
    read USER
     
    VERIF=`grep $USER /etc/passwd | cut -d: -f1`
    if [ ! -e "$VERIF" ]; then
    echo "L'utilisateur $USER n'existe pas, vous devez d'abord le créer!!"
    else [ -e "$VERIF" ];
    echo "L'utilisateur $USER existe bien...lancement du script..."
    [...]
    Voilà, si quelqu'un a une idée....car je ne sais pas si c'est bien la commande qu'il faut pour tester si la valeur est vrai ou fausse.
    Tu utilises "test -e" => l'option "-e" sert à tester l'existence d'un fichier
    Tu veux vérifier qu'une variable est vide => test -z
    Tu veux vérifier qu'une variable n'est pas vide => test -n

    Maintenant, si t'as pas réellement besoin du contenu de la variable "VERIF", alors pourquoi la remplir ?
    Tu peux très bien simplement tester que la commande "grep" affiche une chaîne vide ou pas vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test -z "`grep $USER /etc/passwd`"
    Ou mieux, tester que la commande "grep" a réussi son travail ou pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if grep $USER /etc/passwd
    Ce qui t'évite de passer par le mécanisme subprocess des backquottes (hé oui, on n'est pas obligé de mettre "test" après un "if"; on peut mettre la commande qu'on veut pourvu que cette commande renvoie un état V/F)

    Pour te former regarde du coté des cours et tutoriels pour apprendre Linux.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    1. Evite d'écraser la variable $USER, elle contient le nom de ton user.
    2. Il est impératif de faire une recherche sur un mot ( -w comme Word ).
    Exemple, si le nom saisi est Marti et qu'un certain Martin existe dans /etc/passwd, une recherche de chaîne (et non de mot) considérera que Marti existe déja


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    echo -n "Nom de votre utilisateur? : "
    read User
    if ! grep -q -w "^$User" /etc/passwd ; then
       echo "L'utilisateur $User n'existe pas, vous devez d'abord le créer!!"
       exit
    else 
       echo "L'utilisateur $User existe bien...lancement du script..."
    fi

    Voir man de grep :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
           -q, --quiet, --silent
                  Quiet; do not write anything to standard output.   Exit  immedi-
                  ately  with  zero status if any match is found, even if an error
                  was detected.  Also see the -s or --no-messages option.
    
           -w, --word-regexp
                  Select only those lines containing matches that form whole words.  The  test  is
                  that the matching substring must either be at the beginning of the line, or pre-
                  ceded by a non-word constituent character.  Similarly, it must be either at  the
                  end  of  the  line  or  followed by a non-word constituent character.  Word-con-
                  stituent characters are letters, digits, and the underscore.
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BlaireauOne Voir le message
    1. Evite d'écraser la variable $USER, elle contient le nom de ton user.
    Il l'écrase pas ???...
    Citation Envoyé par BlaireauOne Voir le message
    2. Il est impératif de faire une recherche sur un mot ( -w comme Word ).
    Exemple, si le nom saisi est Marti et qu'un certain Martin existe dans /etc/passwd, une recherche de chaîne (et non de mot) considérera que Marti existe déja
    Pas obligé dans ce cas précis. Tu peux aussi utiliser le fait que le login continue par ":" et inclure ce caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ! grep -q "^$User:" /etc/passwd ; then
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre régulier Avatar de loopback
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 170
    Points : 113
    Points
    113
    Par défaut
    Voici ce que j'ai fait:

    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
    20
    #!/bin/bash
    #
    echo -n "Nom de votre utilisateur? : "
    read USER
     
    VERIF=`grep $USER /etc/passwd`
    if [ $? -ne 0 ]; then
        echo "L'utilisateur $USER n'existe pas, vous devez d'abord le créer!!"
    exit 1
    else
        echo "L'utilisateur $USER existe bien...lancement du script..."
    fi
     
    [...]
     
    echo
    echo "Script terminé"
    echo
    sleep 1
    exit 0
    mais appremment dans tous les cas si l'utilisateur existe ça marche,
    si l'utilisateur n'existe pas ça marche mais si l'utilisateur existe pas et que je met tot au lieu de toto il me dit qu'il existe.

    par ex.: on suppose que jfkennedy existe sur le système et bien si je tappe jfken il me dit qu'il existe aussi alors que c faut.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par loopback Voir le message
    Voici ce que j'ai fait:

    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
    20
    #!/bin/bash
    #
    echo -n "Nom de votre utilisateur? : "
    read USER
     
    VERIF=`grep $USER /etc/passwd`
    if [ $? -ne 0 ]; then
        echo "L'utilisateur $USER n'existe pas, vous devez d'abord le créer!!"
    exit 1
    else
        echo "L'utilisateur $USER existe bien...lancement du script..."
    fi
     
    [...]
     
    echo
    echo "Script terminé"
    echo
    sleep 1
    exit 0
    Est-ce qu'on peu aussi le faire par ce moyen ?
    Si ça marche c'est qu'on peut le faire (juste faire gaffe à ce qu'a dit BlaireauOne sur le risque des homonymies (tu cherches "marti" et ton fichier contient "martin") et à la façon dont lui et moi t'avons conseillé de le résoudre)

    Maintenant, comme je le répète, ta variable "VERIF" ne sert à rien et tu utilises un mécanisme de déroutement (les backquottes) inutile (perte de temps inutile)
    Tu peux aussi donc le faire ainsi

    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
    20
    #!/bin/bash
    #
    echo -n "Nom de votre utilisateur? : "
    read USER
     
    grep "^$USER:" /etc/passwd 1>/dev/null
    if [ $? -ne 0 ]; then
        echo "L'utilisateur $USER n'existe pas, vous devez d'abord le créer!!"
    exit 1
    else
        echo "L'utilisateur $USER existe bien...lancement du script..."
    fi
     
    [...]
     
    echo
    echo "Script terminé"
    echo
    sleep 1
    exit 0
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre régulier Avatar de loopback
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 170
    Points : 113
    Points
    113
    Par défaut
    Edit

    Ceci marche parfaitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep "^$USER:" /etc/passwd 1>/dev/null
    if [ $? -ne 0 ]; then
    car j'avais pas fait attention à la casse de User...

    Merci à vous 2

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par loopback Voir le message
    Edit

    Ceci marche parfaitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep "^$USER:" /etc/passwd 1>/dev/null
    if [ $? -ne 0 ]; then
    Tu lances une commande et tu vérifies sont statut. Tu peux donc raccourcir et vérifier directement la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if grep "^$USER:" /etc/passwd 1>/dev/null; then
    Relis ton cours => tu verras qu'après "if" on indique une commande. La commande généralement utilisée est "test" => "if test ...; then" mais ce n'est pas obligatoirement la seule possible...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [Débutant] Simulation d'image pour tester une chaîne de traitement du signal
    Par Leanhaun dans le forum MATLAB
    Réponses: 2
    Dernier message: 29/01/2015, 00h05
  2. [RegEx] Regex pour récupérer une chaîne de 6 chiffres
    Par calitom dans le forum Langage
    Réponses: 5
    Dernier message: 12/06/2008, 21h37
  3. Expression régulière pour récupérer une chaîne.
    Par z980x dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/06/2007, 15h01
  4. [OS Perso] Récupérer une chaîne de caractères
    Par log2n dans le forum Programmation d'OS
    Réponses: 31
    Dernier message: 14/02/2006, 13h56
  5. Réponses: 2
    Dernier message: 17/06/2005, 13h38

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