je souhaite realiser un script en bash pour ajouter des utilisateurs samba
je souhaite realiser une condition du type
si $users existe dans /etc/samba/smbpasswd
alors
l'utilisateur existe
sinon
"creation de l'utilisateur"
fin si
Pour cela j’ai essayer
if [cat "/etc/samba/smbpasswd" = "$users"]
cela ne semble pas fonctionner
Je suis debutant en bash et je souhaite realiser un script le plus simple possible
si une ame charitable peu me venir en aide je lui en serait reconnaissant
J’ai la flemme de regarder la syntaxe d’un fichier utilisateur de samba,
donc je te donne un exemple qui marche avec /etc/passwd :
if cat /etc/passwd | cut -f 1 -d : | grep -q '^BBT$'; then
echo ok
else
echo fail
fi
Donc là je prend mon fichier passwd,
je prend uniquement le premier des champs séparés par des :
je regarde si une ligne contient exactement mon login BBT (sans rien affichier sur la sortie standard)
et j’effectue un traitement :
j’affiche ok si je suis présent dans les utilisateurs,
sinon j’affiche fail.
if cut -f 1 -d : /etc/passwd | grep -q '^BBT$'; then
echo ok
else
echo fail
fi
fonctionne, cut avec un argument ouvre le fichier.
Cela dit, dans une succession de traitement comme cela, j’écris le «cat», chacun sa méthode…
mon script est fonctionnel grace a la commande if fourni pour ceux que cela interesse voici mon script n’hesiter pas si il y a des choses a dire
#!/bin/bash
# SCRIPT ajout_users_smb.sh
#definition des variables
#==========================
echo Entrer le nom d utilisateurs :
read nom_users
echo Dans quel groupe doit etre l utilisateur :
read nom_groupe
#Creation du compte
#==================
if cut -f 1 -d : </etc/samba/smbpasswd | grep -q '$nom_users';
then
echo l utilisateur $nom_users existe deja
else
useradd -G $nom_groupe -m -N -d /srv/samba/home/$nom_users -s /bin/false $nom_users
fi
echo entrer le mot de passe pour l utilisateur $nom_users
smbpasswd -a $nom_users
les boucles de type while existe t’elle en bash ?
je pense par la suite rajouter une condition
Je rencontre quelque soucis lorsque le script ci dessus est mis dans une boucle while.
La boucle fonctionne correctement mais le script du dessus n’est plus fonctionnel
merci a ceux qui pourront eclairer ma lanterne
#definition des variables
#==========================
while [ -z $boucle ] || [ $boucle = ‘oui’ ];
do
echo Entrer le nom d utilisateurs :
read nom_users
if cut -f 1 -d : </etc/passwd | grep -q '$nom_users’
then
echo l utilisateur $nom_users existe deja
else
echo Dans quel groupe doit etre l utilisateur :
read nom_groupe
J’ai pas encore tout lu en détail mais je pense que mettre un set -x en début de script
peut t’aider à conprendre ce qui se passe.
Ça va activer le mode de debug de bash qui va afficher chaque ligne qui est interprétée
et je crois les résultats intermédiaires aussi.
Essaie de remplacer “cut -f 1 -d : </etc/passwd” par “cut -f 1 -d : /etc/passwd”.
Il est possible qu’on essaie de faire trop de choses en même temps sur l’entrée standard.
le fait de changer les simple quote en double cote a resolu mon probleme
une après midi pour un detail comme cela, je ne pense pas refaire la meme erreur de si tot
Merci de votre aide a tous
Voici pour ceux que sa interesse le script modifier et fonctionnel
#!/bin/bash
#SCRIPT sambascript.sh
#definition des variables
#==========================
while [ -z $boucle ] || [ $boucle = 'oui' ];
do
echo Entrer le nom d utilisateurs :
read nom_users;
if cut -f 1 -d: </etc/passwd | grep -q "$nom_users";
then
echo l utilisateur $nom_users existe deja
exit 0
else
echo Dans quel groupe doit etre l utilisateur :
read nom_groupe
#Creation du compte
#==================
useradd -G $nom_groupe -m -N -d /srv/samba/home/$nom_users -s /bin/false $nom_users
#Boucle while
#============
echo "voulez vous creer un autre utilisateur? : (oui/non)"
read boucle
fi
done
[quote=“fret92”]le fait de changer les simple quote en double cote a resolu mon probleme
une après midi pour un detail comme cela, je ne pense pas refaire la meme erreur de si tot
[/quote]
En fait le truc en bash,
c’est de comprendre que l’on manipule du texte,
et d’identifier comment et dans quel ordre ce texte est remplacé dans les différentes expressions.
Une fois qu’on a bien saisi ça, la bash devient d’un coup beacoup plus limpide
(bon, pour maîtriser faut pratiquer aussi )