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 :

[Probleme] shell -- unamary operator expected


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut [Probleme] shell -- unamary operator expected
    Bonjour,

    Donc voilà j'ai ce code qui me pose problème plus précisément sur la partie du while. L'erreur que j'obtiens est, seulement lorsque je lance action "s" :
    line 24: unexpeted EOF while looking for matching '`'
    line 40: syntaxe error: unexpeted end of file
    Je me doute que cela viens de mon EOF mais le problème c'est que dans ce fichier le EOF est un retour à la ligne et je ne sais comment l'indiquer.


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/bin/sh
     
    echo "Que voulez vous faire, (a)jouter des comptes ou (s)uprimer des comptes :";
    read action;
    echo $action;
    if [ $action = "a" ]; then
    	echo "Donner le nom du groupe :";
    	read group2;
    	echo "Donner le nom de l utilisateur :";
    	read user2;
    	groupadd $group2;
    	useradd -g $group2 -d /dev/null -s /etc $user2;
    	mkdir /$group2;
    	mkdir /$group2/$user2;	
    	pure-pw useradd $user2 -u $user2 -d /$group2/$user2;
    	pure-pw mkdb;
    fi
    if [ $action = "s" ]; then
    	echo "Donner le nom du groupe :";
    	read group2;
    	echo "Donner le nom de l utilisateur (all pour tout les user) :";
    	read user2;
    	if [ $user2 = "all" ]; then
    		$gid2=$(grep ^$group2: /etc/group | grep -o [0-9][0-9]*');
    		while IFS=: read user pass uid gid full home shell;
    		do
    			if [ $gid = $gid2 ]; then
    				userdel -r -f $user;
    				pure-pw userdel $user;
    				pure-pw mkdb;
    			fi
    		done < /etc/passwd
    	else
    		userdel $user2;
    		pure-pw userdel $user2;
    		groupdel $group2;
    		pure-pw mkdb;
    	fi
    fi
    Merci d'vance pour reponses.

    PS: ce script est lancé sur une debian 4.0r5

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Pk faire IFS=: dans la boucle while. Tu pouvais le faire avant la boucle, non?

    Est ce que tu pourrais en meme temps un peu explicite sur ce que tu voulais faire?

    P.S : mets des guillemets dans tes variables, par exemple $action et $gid, ca ter permettra de mieux gérer les espaces.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    Pk faire IFS=: dans la boucle while. Tu pouvais le faire avant la boucle, non?

    Est ce que tu pourrais en même temps un peu explicite sur ce que tu voulais faire?

    P.S : mets des guillemets dans tes variables, par exemple $action et $gid, ca ter permettra de mieux gérer les espaces.

    Je ne suis pas très douer en shell c'est mon premier.
    Le IFS dans le while c'est car j'ai récupéré ce script sur un site.
    Sinon ce script en faîtes me permet de créer des groupes & comptes plus un dossier et ensuite créer un utilisateur FTP de pure-ftpd. La deuxièmes partie supprime un utilisateur ou si on met all alors cela supprimera tous les comptes lié au groupe.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    24 $gid2=$(grep ^$group2: /etc/group | grep -o [0-9][0-9]*')
    Il ne faut pas de $ devant gid2 lorsque tu initialises une variable en shell

    Il faut donc retirer le $ en trop de gid2.
    De plus les ; ne sont pas nécessaires si tu ne mets pas toutes les commandes sur une même ligne.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Merci pour ton aide mais cela ne change rien mais j'ai remarquer quelque chose.
    N'importe quel valeur à la variable action il effectue cette partie du script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	echo "Donner le nom du groupe :";
    	read group2;
    	echo "Donner le nom de l utilisateur :";
    	read user2;
    	groupadd $group2;
    	useradd -g $group2 -d /dev/null -s /etc $user2;
    	mkdir /$group2;
    	mkdir /$group2/$user2;	
    	pure-pw useradd $user2 -u $user2 -d /$group2/$user2;
    	pure-pw mkdb;
    Pourtant j'ai bien vérifié action prend bien la valeur que je lui donne mais les IF ne fonctionne pas.

    EDIT : Une erreur de ma part en faîtes les IF fonctionne très bien, oups .
    En faite le while fonctionne très bien c'est seulement cette partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gid2=$(grep ^$group2: /etc/group | grep -o [0-9][0-9]*');

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    J'ai réglé en partie mon problème comme un idiot j'ai oublié un '

    gid2=$(grep ^$group2: /etc/group | grep -o '[0-9][0-9]*');

    Maintenant j'ai un grand nombre d'erreur :

    line 27 : [: XXX: unamary operator expected
    line 27 : [: XXX: unamary operator expected
    line 27 : [: XXX: unamary operator expected
    line 27 : [: XXX: unamary operator expected
    line 27 : [: XXX: unamary operator expected
    ou XXX représente apparemment tous les numéros gid existant

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re,

    Tu devrais étudier les opérateurs de comparaison du shell.

    http://www.linuxtopia.org/online_boo...rison-ops.html

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

Discussions similaires

  1. Bareword found where operator expected at stats.pl
    Par Premium dans le forum Langage
    Réponses: 2
    Dernier message: 21/01/2008, 14h04
  2. Réponses: 2
    Dernier message: 13/10/2007, 00h29
  3. Réponses: 7
    Dernier message: 04/12/2006, 22h15
  4. [VBA]probleme : erreur 2001 operation annulée
    Par julio78 dans le forum Access
    Réponses: 6
    Dernier message: 09/01/2006, 16h21
  5. Scalar found where operator expected at...
    Par Mr Hyde dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 17h06

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