Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/05/2008, 12h11   #1
Invité régulier
 
Étudiant
Inscription : juin 2007
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 31
Points : 7
Points : 7
Par défaut script samba pour la création d'utilisateur

Bonjour à tous,

J'ai un problème sur mon script samba. Je veut créer des utilisateurs à partir d'un fichier texte, mais le script me renvoi à la création

Code :
1
2
3
4
/home/utilisateur: line 1: linebacker: command not found
/home/utilisateur: line 2: bastien: command not found
/home/utilisateur: line 3: debian: command not found
/home/utilisateur: line 4: gaulois: command not found
Voici mon script avec mes fonctions et mon menu.

Code :
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
 
#!/bin/sh
 
########################LES FONCTIONS########################
 
function ajout_utilisateur()
{
fichier=`/home/utilisateur`
mdp=`mkpasswd igjjr`
 
if test -e $fichier
then
	users=`cat $fichier`
	for val in $users
	do
		if grep $val /etc/passwd 
			then
			c=1			
			else
			c=2
		fi
 
		if [ $c -eq 1 ]
			then
			smbpasswd -a -n $val
			else
			useradd -mp $mdp $val
			smbpasswd -a -n $val
		fi	
	done
fi
}
 
function supp_utilisateur()
{
fichier=`/home/utilisateur`
if test -e $fichier
	then cat $fichier | while read val
		do
		user=$val
		find /-user $user|xargs rm
		userdel -rf $user
		done
		echo "l'utilisateur $user a été supprimé"
fi
}
 
###############################MENU PRINCIPAL################################
choix=0
echo "-------------------MENU---------------------"
echo "Bienvenue dans la configuration SAMBA"
echo "1- Créer des utilisateurs"
echo "2- Supprimer des utilisateurs"
echo "3- Créer des comptes machines"
echo "4- Supprimer des comptes machines"
echo "5- Quitter le programme"
echo ""
 
echo "Faites votre choix:"
read choix
 
while [ $choix -lt 1 ] || [ $choix -gt 5 ]
do
	echo "-------------------MENU---------------------"
	echo "Bienvenue dans la configuration SAMBA"
	echo "1- Créer des utilisateurs"
	echo "2- Supprimer des utilisateurs"
	echo "3- Créer des comptes machines"
	echo "4- Supprimer des comptes machines"
	echo "5- Quitter le programme"
	echo ""
 
	echo "Faites votre choix:"
	read choix
done
 
 
if [ $choix -eq 1 ]
	then ajout_utilisateur
fi
if [ $choix -eq 2 ]
	then
	supp_utilisateur
if [ $choix -eq 3 ]
	then
	ajout_machine
fi
if [ $choix -eq 4 ]
	then
	supp_machine
fi
if [ $choix -eq 5 ]
	then
	echo "fin du programme"
fi
Merci à tous
Pti_U est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 22h02   #2
Membre chevronné

 
Avatar de D[r]eadLock
 
Inscription : mai 2002
Messages : 504
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 504
Points : 622
Points : 622
Pourquoi as-tu des backticks (``) pour fichier ??
Code :
fichier=/home/utilisateur
suffit.

Ton indentation est pourrie Et tu peux juste afficher le menu dans ta boucle (vu que choix vaut 0 au début).
__________________
1)Avant de poster, merci de lire les règles. 2)Utiliser [code] [/code] pour quoter le code ! 3)Conseils pour le forum C [a lire en entier!]
D[r]eadLock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 14h09   #3
Invité régulier
 
Étudiant
Inscription : juin 2007
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 31
Points : 7
Points : 7
Tout d'abord merci de ta réponse,

au niveau des quotes `` je pensais qu'il fallait déclarer le fichier comme cela!!!
En ce qui concerne l'indentation, je sais pas ce que c'est, pourrais-tu m'éclairer un peu de sorte à ce quelle ne soit pas pourrit.

Thank's

à bientôt
Pti_U est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 13h24   #4
Membre chevronné

 
Avatar de D[r]eadLock
 
Inscription : mai 2002
Messages : 504
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 504
Points : 622
Points : 622
Désolé ton indentation n'est pas si pourrie (je ne sais plus ce qui m'a faire dire ça), enfin c'est juste que les else ne sont pas alignés sur le if.
Pour en revenir au problème, les backtick (ou back-quotes) permettent de lancer une commande et de récuperer le résultat (ce que tu fais pour mkpasswd). Pour les noms, il ne faut rien mettre. /home/utilisateur n'est pas une executable (si ?!!).
Après ce qui est bizarre c'est ton message d'erreur. Perso, (avec bash il est vrai), si je mets ``, j'ai /home/utilisateur: no command found; et sinon (i.e. sans rien), ca a l'air de marcher (j'ai pas teste en root, donc smbpasswd me jette).
__________________
1)Avant de poster, merci de lire les règles. 2)Utiliser [code] [/code] pour quoter le code ! 3)Conseils pour le forum C [a lire en entier!]
D[r]eadLock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2008, 14h03   #5
Invité régulier
 
Étudiant
Inscription : juin 2007
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 31
Points : 7
Points : 7
Bonjour à tous,

j'ai de nouveau un problème sur mon script samba.

Code :
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
###############################MENU PRINCIPAL################################
choix=0
while [ $choix -ne 5 ]
do
echo "-------------------MENU---------------------"
echo "Bienvenue dans la configuration SAMBA"
echo "1- Créer des utilisateurs"
echo "2- Supprimer des utilisateurs"
echo "3- Créer des comptes machines"
echo "4- Supprimer des comptes machines"
echo "5- Quitter le programme"
echo ""
echo "Faites votre choix:"
read choix
 
while [ $choix -lt 1 ] || [ $choix -gt 5 ]
do
	echo "-------------------MENU---------------------"
	echo "Bienvenue dans la configuration SAMBA"
	echo "1- Créer des utilisateurs"
	echo "2- Supprimer des utilisateurs"
	echo "3- Créer des comptes machines"
	echo "4- Supprimer des comptes machines"
	echo "5- Quitter le programme"
	echo ""
	echo "Faites votre choix:"
	read choix
done
if [ $choix -eq 5 ]; then break; fi
while true
do
	if [ $choix -eq 1 ]
	then 
	ajout_utilisateur
	echo "appuyer sur o pour effectuer une autre action ? "
		read ok
		if [ $ok == "o" ]; 
		then break; 
		else choix=5;
		fi
	fi
	if [ $choix -eq 2 ]
	then
	supp_utilisateur
	echo "appuyer sur o pour effectuer une autre action ? "
		read ok
		if [ $ok == "o" ]; 
		then break; 
		fi
	fi
	if [ $choix -eq 3 ]
	then
	ajout_machine
	echo "appuyer sur o pour effectuer une autre action ? google.fr/"
		read ok
		if [ $ok == "o" ]; 
		then break; 
		fi
	fi
	if [ $choix -eq 4 ]
	then
	supp_machine
	echo "appuyer sur o pour effectuer une autre action ? "
		read ok
		if [ $ok == "o" ]; 
		then break; 
		fi
	fi
	if [ $choix -eq 5 ]
	then
	echo "fin du programme"
	ok="n"
	fi
done
done
En effet, au niveau de mes appels de fonction, je demande à l'utilisateur s'il veut retourner au menu ou s'il veut quitter.

Exemple:

Citation:
-------------------MENU---------------------
Bienvenue dans la configuration SAMBA
1- Créer des utilisateurs
2- Supprimer des utilisateurs
3- Créer des comptes machines
4- Supprimer des comptes machines
5- Quitter le programme

Faites votre choix:
je choisi 1 donc cela lance ma fonction ajout_utilisateur

Citation:
1
linebacker$::1007:1008::/home/linebacker$:/bin/sh
Failed to modify password entry for user linebacker
appuyer o pour retourner au menu et n pour quitter le programme
si j'appuis sur o cela fonctionne, mais sur n la fin du programe tourne en boucle comme ceci:

Citation:
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
fin du programme
Jusqu'a l'infini
Quelqu'un aurait une petite idée???

Merci, à bientôt
Pti_U est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 12h19   #6
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 499
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 499
Points : 9 681
Points : 9 681
Bonjour,

Pour ton premier problème, peux-tu poster le code de ajout_utilisateur ?

Pour ton second problème, c'est normal : il te manque un break pour quitter la boucle dans le cas où $choix vaut 5 :

Code :
1
2
3
4
5
	if [ $choix -eq 5 ]
	then
	echo "fin du programme"
	ok="n"
	fi
Sinon, pourquoi utilises-tu des if et non pas un case ?
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 17h04   #7
Invité régulier
 
Étudiant
Inscription : juin 2007
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 31
Points : 7
Points : 7
Bonjour,

après quelques modifications, voici le nouveau problème :

Mes fonctions marchent correctement, mes j'ai un problème. Lorsque je lance une fonction (par exemple ajout_utilisateur) tout ce passe bien jusqu'a que je pose la question "Voulez vous effectuer une autre action ? o/n ". Si je répond o je devrais revenir sur le menu, alors que là le script s'arrête. Si je réponds n le programme s'arrête correctement.

voici mon script:

Code :
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/sh
 
########################LES FONCTIONS########################
 
function ajout_utilisateur()
{
fichier=/home/utilisateur
mdp=`mkpasswd igjjr`
mdp2="igjjr"
if test -e $fichier
then
	users=`cat $fichier`
	for val in $users
	do
		if grep $val /etc/passwd 
			then
			c=1			
			else
			c=2
		fi
 
		if [ $c -eq 1 ]
			then
			(echo $mdp2;echo $mdp2)|smbpasswd -a -s $val
			else
			useradd -d /home/$val -mp $mdp $val
			(echo $mdp2;echo $mdp2)|smbpasswd -a -s $val
		fi	
	done
fi
}
 
function supp_utilisateur()
{
fichier=/home/utilisateur
if test -e $fichier
	then cat $fichier | while read val
		do
		user=$val
		smbpasswd -x $user
		userdel -r $user
		done
fi
}
 
function ajout_machine()
{
fichier=/home/machine
if test -e $fichier
then 
	users=`cat $fichier`
	for val in $users
	do
		if grep $val /etc/passwd 
			then
			c=1			
			else
			c=2
		fi
		if [ $c -eq 1 ]
			then
			smbpasswd -m $val
			else
			useradd $val
			smbpasswd -m $val
		fi	
	done
fi
}
 
function supp_machine()
{
fichier=/home/machine
if test -e $fichier
	then cat $fichier | while read val
		do
		user=$val
		smbpasswd -x $user
		userdel $user
		done
fi
}
 
 
###############################MENU PRINCIPAL################################
function menu()
{
choix=0
while [ $choix -lt 1 ] || [ $choix -gt 5 ]
do
	echo "-------------------MENU---------------------"
	echo "Bienvenue dans la configuration SAMBA"
	echo "1- Créer des utilisateurs"
	echo "2- Supprimer des utilisateurs"
	echo "3- Créer des comptes machines"
	echo "4- Supprimer des comptes machines"
	echo "5- Quitter le programme"
	echo ""
	echo "Faites votre choix:"
	read choix
done
}
 
menu
 
if [ $choix -eq 1 ]
	then 
	ajout_utilisateur
	echo "Voulez vous effectuer une autre action ? o/n "
	read ok
	if [ $ok == "o" ]
		then
		menu
		else 
		echo "fin du programme"
	fi
fi
if [ $choix -eq 2 ]
	then
	supp_utilisateur
	echo "Voulez vous effectuer une autre action ? o/n "
	read ok
	if [ $ok == "o" ]
		then 
		menu
		else
		echo "fin du programme"
	fi
fi
if [ $choix -eq 3 ]
	then
	ajout_machine
	echo "Voulez vous effectuer une autre action ? o/n "
	read ok
	if [ $ok == "o" ]
		then 
		menu
		else
		echo "fin du programme"
	fi
fi
if [ $choix -eq 4 ]
	then
	supp_machine
	echo "Voulez vous effectuer une autre action ? o/n "
	read ok
	if [ $ok == "o" ]
		then
		menu
		else 
		echo "fin du programme"
	fi
fi
if [ $choix -eq 5 ]
	then
	echo "fin du programme"
fi

merci d'avance, a bientôt
Pti_U est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2008, 12h43   #8
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 499
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 499
Points : 9 681
Points : 9 681
Bonjour,

Analysons ce qu'il se passe dans ton code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#.......
menu
 
if [ $choix -eq 1 ]
	then 
	ajout_utilisateur
	echo "Voulez vous effectuer une autre action ? o/n "
	read ok
	if [ $ok == "o" ]
		then
		menu
		else 
		echo "fin du programme"
	fi
fi
if [ $choix -eq 2 ]
#.......
Donc, je vais avoir le menu. Très bien. Là je tapes 1, donc je rentre dans le if ci-dessus, qui m'ammène vers un ajout d'utilisateur, qui se passe très bien.
Lorsque cette fonction finit, je me vois poser la question "Voulez vous effectuer une autre action ? o/n ". Je réponds O, qui est lu et stockée dans la variable 'ok'.
Je rentre dans le if, qui m'affiche donc le menu. Très bien. Et je re-choisis 1, ce qui fait que la variable 'choix' vaut 1.
Le if se finit, et le programme continue, avec les différents if sur choix. Mais je ne rentre dans aucun, puisqu'ils ne testent que les valeurs de 2 à 5.

Voici un exemple d''algorithme à mettre en oeuvre (# indique un commentaire)

Code :
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
 
OK='o'
 
Tant que ( OK = 'o')
{
  menu # va donner sa valeur à la variable choix
  switch (choix)
  {
    cas 1 : 
      # traitement du cas 1
    fin cas 1
    cas 2 : 
      # traitement du cas 2
    fin cas 2
    cas 3 : 
      # traitement du cas 3
    fin cas 3
    cas 4 : 
      # traitement du cas 4
    fin cas 4
    cas 5 : 
      # traitement du cas 5
    fin cas 5
    }
  afficher "Voulez-vous continuer (O/N) ?"
  lire OK
}
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2008, 14h08   #9
Invité régulier
 
Étudiant
Inscription : juin 2007
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 31
Points : 7
Points : 7
je viens de refaire mon script avec la commande switch et case. Mais je ne connais pas trop ces commandes, donc le script ne fonctionne pas.

voici le script:

Code :
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/sh
 
########################LES FONCTIONS########################
 
function ajout_utilisateur()
{
fichier=/home/utilisateur
mdp=`mkpasswd igjjr`
mdp2="igjjr"
if test -e $fichier
then
	users=`cat $fichier`
	for val in $users
	do
		if grep $val /etc/passwd 
			then
			c=1			
			else
			c=2
		fi
 
		if [ $c -eq 1 ]
			then
			(echo $mdp2;echo $mdp2)|smbpasswd -a -s $val
			else
			useradd -d /home/$val -mp $mdp $val
			(echo $mdp2;echo $mdp2)|smbpasswd -a -s $val
		fi	
	done
fi
}
 
function supp_utilisateur()
{
fichier=/home/utilisateur
if test -e $fichier
	then cat $fichier | while read val
		do
		user=$val
		smbpasswd -x $user
		userdel -r $user
		done
fi
}
 
function ajout_machine()
{
fichier=/home/machine
if test -e $fichier
then 
	users=`cat $fichier`
	for val in $users
	do
		if grep $val /etc/passwd 
			then
			c=1			
			else
			c=2
		fi
		if [ $c -eq 1 ]
			then
			smbpasswd -m -a $val
			else
			useradd $val
			smbpasswd -m -a $val
		fi	
	done
fi
}
 
function supp_machine()
{
fichier=/home/machine
if test -e $fichier
	then cat $fichier | while read val
		do
		user=$val
		smbpasswd -x $user
		userdel $user
		done
fi
}
 
###############################MENU PRINCIPAL################################
function menu()
{
choix=0
while [ $choix -lt 1 ] || [ $choix -gt 5 ]
do
	echo "-------------------MENU---------------------"
	echo "Bienvenue dans la configuration SAMBA"
	echo "1- Créer des utilisateurs"
	echo "2- Supprimer des utilisateurs"
	echo "3- Créer des comptes machines"
	echo "4- Supprimer des comptes machines"
	echo "5- Quitter le programme"
	echo ""
	echo "Faites votre choix:"
	read choix
done
}
 
ok=o
while [ ok == "o" ]
do
	menu 
  	switch ($choix)
  	{
 
case 1: ajout_utilisateur;
	break;
 
case 2: supp_utilisateur;
	break;
 
case 3: ajout_machine;
	break;
 
case 4: supp_machine;
	break;
 
case 5: echo "fin du programme";
	break;
	}
 
  echo "Voulez-vous continuer (O/N) ?"
  read ok
done
merci, à bientôt
Pti_U est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h20.


 
 
 
 
Partenaires

Hébergement Web