creation d'un premier script [bash] - Shell/Batch - Programmation
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).
Marsh Posté le 22-10-2007 à 12:43:02
Evites chmod. Utilise plutôt mkdir -m.
Marsh Posté le 22-10-2007 à 22:55:52
ReplyMarsh 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
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
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
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
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. |
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
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?
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!
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
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).
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?