[bash]creation d'un premier script

creation d'un premier script [bash] - Shell/Batch - Programmation

Marsh Posté le 21-10-2007 à 17:01:02    

Bonjour,
Je suis debutante en script bash et j'aimerais avoir de l'aide pour faire un exercice.
Je precise que je suis sous Fedora.
 
Voici mon exercice :
Écrire un script qui permet la création d'un groupe et d'un répertoire /home/nom_du_groupe. Ce répertoire devra appartenir au groupe créé. Ce répertoire contiendra par la suite tous les répertoires de travail des utilisateurs de ce groupe.
 
De plus, un répertoire /home/nom_du_groupe/public sera créé. Il appartiendra à root et au groupe créé. Le groupe aura les permissions de lecture et d'exécution sur ce répertoire.
Ce script admettra pour seul paramètre le nom du groupe. Vous devez donc vérifier que le nombre de paramètre est exacte, et que le groupe donné en paramètre n'existe pas.
 
J'ai fait une bribe de script mais je ne sais pas du tout si c'est exacte (j'ai eu qu'un seul cours) :
#!/bin/bash
# declaration du paramètre
i=groupA
 
# verification du nombre de paramètre
if [ $# -ne 1 ] then
 
  # verification de l'absence de ce nom de groupe
  if ! existe /etc/group/$i  then
 
  mkdir /home/$1
  chgrp $i /home/$i
  mkdir /home/$i/public
  chgrp $i /home/$i/public
  chown root /home/$i/public
  chmod 750 public
   
  exit 1
exit 1
 
Bon j'ai l'impression d'être à coté de la plaque, j'ai fait ceci avec ce que j'ai pu trouver par ci par là.
Pouvez-vous m'aider s'il vous plait?

Reply

Marsh Posté le 21-10-2007 à 17:01:02   

Reply

Marsh Posté le 22-10-2007 à 05:20:06    

Commence deja par un :
man bash
pour la syntaxe exacte des "if".
 
Ensuite, execute ton script et verifie les erreurs/resultats. Il te manque encore notamment la recuperation du nom de groupe donne en parametre du script (la tu codes ce nom "en dur" ) et la creation du groupe en question (commande groupadd).

Reply

Marsh Posté le 22-10-2007 à 12:43:02    

Evites chmod. Utilise plutôt mkdir -m.


Message édité par matafan le 22-10-2007 à 12:43:21
Reply

Marsh Posté le 22-10-2007 à 22:55:52    

Ok merci, j'essaie ça demain et je vous tiens au courant :)

Reply

Marsh Posté le 24-10-2007 à 10:58:56    

linoute a écrit :

Ok merci, j'essaie ça demain et je vous tiens au courant :)


http://fr.lang.free.fr/cours/Shell_v2.0.pdf


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 28-10-2007 à 19:42:31    

Bonsoir,
J'ai reussi à faire mon premier script, je suis assez contente.
J'ai cherché de la doc une peu partout et au final j'arrive à le lancer :)
 
Voila ce que j'ai mis :
#! /bin/bash
 
if (grep ^$1 /etc/group )
then echo "le groupe existe"
else echo "le groupe n'existe pas"
fi
if ($# -ne 1)
then echo "le nombre de paramètre ne correspond pas"
exit 1
fi
groupadd $1
mkdir /home/$1
chgrp $1 /home/$1
mkdir /home/$1/public
chgrp $1 /home/$1/public
chmod 750 /home/$1/public
 
Merci pour votre aide.
J'en ai encore 5 à faire donc il est fort possible que je vous sollicite encore  ;)

Reply

Marsh Posté le 29-10-2007 à 03:11:25    

En fait, il serait plus logique de verifier le nombre de parametres avant le grep.
 
Et aussi, si le groupe existe, que reste-t-il a faire ? La tu verifies mais ne traite pas encore le cas, tu continues quand meme comme si de rien n'etait ;)

Reply

Marsh Posté le 29-10-2007 à 09:29:20    

Quelques recommendations :
 
- ne fais jamais confiance au PATH. Il faut soit que tu fixe le PATH au début de ton script, soit (et c'est le miex) n'utiliser que des chemins absolus pour les commandes (défini toi des variables dans le genre MKDIR=/bin/mkdir, CHGRP=/bin/chgrp, ...)
 
- Utilise mkdir -m plutot que mkdir + chmod ()
 
- Copie tes variables $1, $2, ... dans une autre variable, et utilise cette variable au lieu des $n dans ton script (GROUP=$1).
 
- Indente ton code
 
- Affiche tes messages d'erreur sur stderr, pas sur stdin (echo "blah blah blah" >&2)
 
- Teste le code de retour des commandes, et sort en cas d'erreur (après avoir fait le nettoyage et avoir rétabli un état consistant si besoin).
 
- Il te manques des chown

Reply

Marsh Posté le 04-11-2007 à 18:45:38    

wackevat a écrit :

En fait, il serait plus logique de verifier le nombre de parametres avant le grep.
 
Et aussi, si le groupe existe, que reste-t-il a faire ? La tu verifies mais ne traite pas encore le cas, tu continues quand meme comme si de rien n'etait ;)


 
c'est vrai que c'est mieux de verifier le nombre de paramètre avant.
Sinon en ce qui concerne la condition "le groupe existe", je l'ai omis ici mais j'ai mis "exit 1"
 
Merci  :)

Reply

Marsh Posté le 04-11-2007 à 19:06:37    

Salut,
 
Bon comme prevu, je vous sollicite à nouveau pour m'aider à realiser un nouveau script.
J'ai des idées sur la structure et le mecanisme mais j'ai du mal à mettre tout ça en Bash.
 
Voici mon exercice :
Écrire un script qui permet de créer plusieurs utilisateurs à partir d'un fichier de données.
Le script aura pour paramètres le nom du groupe auquel appartiennent les utilisateurs et le nom du fichier de données.
Le fichier de données à la structure suivante:
chaque ligne correspond à un utilisateur
le format d'une ligne est :
pseudo: prénom:nom
Le script fournira aussi un fichier qui contiendra la liste des utilisateurs qui n'ont pu être créés car ils existaient déjà. Cette liste sera affichée à la fin de l'exécution du script
 
Pour appeler mon script :
./createuser nomgoupe nomfichier
 
Premier problème : je voudrais aller dans le fichier où se trouve les données et recuperer la première ligne.
j'ai pensé qu'il faudrait mettre la ligne dans une variable dc j'ai cree une variable ligne.
ligne = recuperation de la ligne dans $2
Ensuite avec cette variable j'utiliserais un "cut" pour creer mon utilisateur.  
 
Pouvez-vous me dire quelle commande je peux utiliser pour recuperer la ligne ?
 
Après je pensais parcourir le fichier avec un "while" puisque que je ne connais pas le nombre de ligne, qu'en pensez-vous?

Reply

Marsh Posté le 04-11-2007 à 19:06:37   

Reply

Marsh Posté le 04-11-2007 à 20:11:37    

linoute a écrit :

Pouvez-vous me dire quelle commande je peux utiliser pour recuperer la ligne ?


read
 

linoute a écrit :

Après je pensais parcourir le fichier avec un "while" puisque que je ne connais pas le nombre de ligne, qu'en pensez-vous?


Beh oui! [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 07-11-2007 à 12:08:24    

J'ai commencé par faire quelque chose mais quand je le lance il bloque et je n'ai pas de message d'erreur :
# /bin/bash
 
for i in $(sort $2)
 
 do
 pseudo = $(cut -d: -f1)
 prenom = $(cut -d: -f2)
 nom = $(cut -d: -f3)
 useradd -g $1  $pseudo
 
done

Reply

Marsh Posté le 07-11-2007 à 13:50:13    

cut attend quelque chose sur stdin (il te manque aussi un "!" après le "#" mais c'est une erreur de recopiage je suppose).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed