Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1400 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [bash]creation d'un premier script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[bash]creation d'un premier script

n°1628245
linoute
Posté le 21-10-2007 à 17:01:02  profilanswer
 

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?

mood
Publicité
Posté le 21-10-2007 à 17:01:02  profilanswer
 

n°1628382
wackevat
Posté le 22-10-2007 à 05:20:06  profilanswer
 

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).

n°1628538
matafan
Posté le 22-10-2007 à 12:43:02  profilanswer
 

Evites chmod. Utilise plutôt mkdir -m.


Message édité par matafan le 22-10-2007 à 12:43:21
n°1628987
linoute
Posté le 22-10-2007 à 22:55:52  profilanswer
 

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

n°1629901
Sve@r
Posté le 24-10-2007 à 10:58:56  profilanswer
 

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.
n°1632455
linoute
Posté le 28-10-2007 à 19:42:31  profilanswer
 

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  ;)

n°1632641
wackevat
Posté le 29-10-2007 à 03:11:25  profilanswer
 

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 ;)

n°1632685
matafan
Posté le 29-10-2007 à 09:29:20  profilanswer
 

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

n°1636488
linoute
Posté le 04-11-2007 à 18:45:38  profilanswer
 

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

n°1636503
linoute
Posté le 04-11-2007 à 19:06:37  profilanswer
 

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?

mood
Publicité
Posté le 04-11-2007 à 19:06:37  profilanswer
 

n°1636516
sircam
I Like Trains
Posté le 04-11-2007 à 20:11:37  profilanswer
 

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}
n°1638126
linoute
Posté le 07-11-2007 à 12:08:24  profilanswer
 

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

n°1638198
matafan
Posté le 07-11-2007 à 13:50:13  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [bash]creation d'un premier script

 

Sujets relatifs
Aide en VB script svp[Batch-XP] "Unseter" une variable ?
Création Site Internet!création de checkbox
[Visual C++] Creation et importation d'une library statique (.lib)éxécution de flash avec script php,pb: perte parametres
Aide script dos de baseCréation d'un bitmap de grande taille
Execution d'un script photoshopcherche aide pour un script
Plus de sujets relatifs à : [bash]creation d'un premier script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR