Lecture fichier script bash

Bonjour,

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

amicalement,

Fret

Regarde du coté de la commande grep. :stuck_out_tongue:

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.

Cache se cat que nous ne sauront voir

if cut -f 1 -d : </etc/passwd | grep -q '^BBT$'; then echo ok else echo fail fi

Mais bon, je pensais que c’était plus facile à expliquer en montrant explicitement le cat…

En fait,

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…

tous dabord un grand merci :slightly_smiling:

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

Merci de votre aide

Fret

syntaxe :

while <condition>; do <contenu> done

exemple :

VAR=0 while [ "$VAR" -lt 10 ]; do VAR=$((VAR+1)) echo VAR = $VAR done

Pour référence :
Bash Reference Manual

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 :question:
merci a ceux qui pourront eclairer ma lanterne

Voici le code : [code]
#!/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
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
[/code]

Le if n’est apparement plus effectif je ne comprend plus

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.

[quote=“fret92”]if cut -f 1 -d : </etc/passwd | grep -q ‘$nom_users’
[/code]

Le if n’est apparement plus effectif je ne comprend plus[/quote]

Désolé, je flood un peu je poste comme ça vient,
$nom_user est protégé avec des quotes simples,
il n’est donc pas remplacé par sa valeur.

Utiliser des quotes doubles " à la place.

Merci de ton aide je test sa desuite :slightly_smiling:

le fait de changer les simple quote en double cote a resolu mon probleme :slightly_smiling:
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 :slightly_smiling:
une après midi pour un detail comme cela, je ne pense pas refaire la meme erreur de si tot
[/quote]

:smiley: 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 :wink: )

Ça vaut pour tout script shell.
D’ailleurs je crois pas que tu utilise des particularités de bash donc autant remplacer ton shbang par :