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

Administration système Discussion :

Aide pour un script shell


Sujet :

Administration système

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 153
    Par défaut Aide pour un script shell
    Salut à tous,

    Premièrement je récupère une liste, avec des noms séparés par des virgules.
    Comme ceci : Alain,Albert,Eugene

    J'aimerais faire un traitement pour chaque prénom de cette liste. Comment pourrais-je utiliser cette liste dans une boucle ?

    Merci d'avance,

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    Premièrement je récupère une liste, avec des noms séparés par des virgules.
    Comment ? Pourquoi ?
    Quel shell ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 153
    Par défaut
    Alors premièrement c'est en bash

    Deuxièmement, la liste je la récupère dans le script en faisant un grep sur un fichier puis un cut. Ensuite j'aimerais traiter chaque prénom de cette liste dans une boucle.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    bonjour slyz0r,

    pour moi grep + cut = sed
    qui pourra, en plus, remplacer les virgules par des espaces.

    On met tout ça dans un tableau/liste, et tourne la boucle !


    mais il y a peut-être une solution 100% bash, peux-tu donner un extrait du fichier ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 153
    Par défaut
    Bonjour et merci pour ton aide !

    Le fichier est /etc/group et je récupère tous les users d'un certain groupe...

    Donc grep + cut pour n'avoir que les users !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maListe=( $(sed 's/.*:\(.*\)/\1/; s/,/\n/g; /^$/d' /etc/group | sort -u) )
    et après ? que dois-tu faire de cette liste ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 153
    Par défaut
    Je ne veux pas modifier le fichier /etc/group...

    Je veux juste récupérer la liste des utilisateurs présent dans un certain groupe, dans ce cas ci "sshlogin".

    Donc je fais SSH_LOGIN=`grep "sshlogin" $GRP_FILE | cut -d ":" -f 4`

    Ce qui me donne lorsque j'affiche la variable SSH_LOGIN :

    albert,robert,eugene,xxx,xxx

    Ensuite j'aimerais que chaque nom d'utilisateur deviennent une variable que je pourrais utiliser par la suite.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    l'expression, que j'ai donnée, ne modifie pas le fichier /etc/group. Elle extrait les noms des membres des groupes, et les place dans un tableau/liste (array).

    Avec les précisions, que tu a apporté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sshLogins=( $(sed -n '/sshlogin/{s/.*:\(.*\)/\1/;s/,/\n/gp}' /etc/group) )
    echo "${sshLogins[@]}"
    albert robert eugene yyy xxx
    echo "${sshLogins[1]}"
    robert
    NB: les noms des variables ne devraient pas être tout en majuscules, pour ne pas, éventuellement, écraser des variables d'environnement, qui, elles sont toujours en majuscules.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 153
    Par défaut
    C'est parfait, c'est pile ce que je voulais !

    Merci !

    Mais juste pour que je comprenne bien...

    Le $() pour la variable sshLogins remplace ` ` ?

    Lorsque l'on met plusieurs valeur à la suite pour une variable on sait les récupérer comme des arguments en fait ? Je ne savais ...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Le $() pour la variable sshLogins remplace ` ` ?
    oui, c'est plus souple, plus facilement imbriquable : à l'intérieur de ` `, il faut protéger ceux qui sont à l'intérieur, alors que dans $(), tu peux en mettre tant que tu veux. voici un exemple stupide : var=$(echo $(ls))

    Lorsque l'on met plusieurs valeur à la suite pour une variable on sait les récupérer comme des arguments en fait ?
    Les tableaux/listes (arrays) sont des variables particulières. Ils sont affectés entre parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unTableau=( pierre paul jacques 'et les autres' )
    et l'indexation commence à zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "${unTableau[0]}"
    pierre
    Depuis bash4, les tableaux peuvent associatifs, c'est à dire, qu'à la place d'un nombre, tu peux avoir un mot...
    cf. ABS - Tableaux
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. besoin d'aide pour un script shell extrayant les données d'un fichier texte ou un fichier log
    Par haithem20080 dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 15/03/2010, 14h10
  2. aide pour un script shell
    Par zazou74 dans le forum Linux
    Réponses: 1
    Dernier message: 10/03/2010, 19h07
  3. Aide pour un script shell
    Par vanitom dans le forum Linux
    Réponses: 2
    Dernier message: 07/04/2007, 19h02
  4. Besoin d'aide pour un script shell
    Par lecharcutierdelinux dans le forum Linux
    Réponses: 5
    Dernier message: 20/05/2006, 10h36
  5. [langage] aide pour un script pliz
    Par biog dans le forum Langage
    Réponses: 6
    Dernier message: 17/05/2005, 13h54

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