Aidez moi svp programmation shell

Fermé
jocker132 Messages postés 14 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 7 janvier 2009 - 5 juin 2008 à 18:23
mamiemando Messages postés 33268 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 septembre 2024 - 6 juin 2008 à 01:26
Bonjour,
S'il vous plait
j'aimerai connaitre la soultion de cet exercice si c'est possible
Ecrire un programme shell qui reçoit plusieurs paramètres (des noms de fichiers). Pour
chaque fichier reçu, il s’agit d’effectuer les tâches suivantes
- Si le fichier est ordinaire vous lui ajouter le droit de lecture, s’il ne l’a pas déjà.
- Si le fichier est un répertoire vous lui ajoutez le droit « x ».
- Sinon vous réinitialisez toute la chaîne de permission relative au propriétaire à «rwx ».
Merci d'avance et bonne journée.
A voir également:

8 réponses

mamiemando Messages postés 33268 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 septembre 2024 7 781
5 juin 2008 à 18:40
Normalement tu as vu en cours
- comment faire des tests en shell (avec if ).
- comment récupérer le résultat d'une commande avec ` `
- comment définir une variable (opérateur =) et en récupérer le contennu (opérateur $)
- comment faire une boucle for
- comment composer des commandes (en gros, en maths on écrit "f o g (x)" et en bash on écrit "x | g | f ") et la barre | s'appelle pipe (se prononce païpe pour éviter toute allusion graveleuse)

S'il te manque ces pré-requis regarde un tutoriel sur bash en cherchant sur google.

Ensuite il suffit d'utiliser les bonnes commandes en particulier grep, cut et ls. Je te donne le début et je te laisse finir pour que tu vois comment démarrer :
#!/bin/sh
for fichier in `ls -1 | grep -v "^total" | xargs`
do
    droits="`ls -l $fichier | cut -f1 -d' '`"
    echo "$fichier a les droits $droits"
done

Pour comprendre le rôle des instructions shell que j'ai utilisé :
man ls
man grep
man xargs
man cut

Tu peux aussi décomposer le mouvement en tapant dans ta console :
ls -1
ls -1 | grep -v "^total"
ls -1 | grep -v "^total" | xargs

Et si par exemple dans ton répertoire il y a un fichier plop.txt :
ls -l plop.txt
ls -l $fichier | cut -f1 -d' '

Bonne chance
0
jocker132 Messages postés 14 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 7 janvier 2009
5 juin 2008 à 18:55
merci pour ton aide
Cependant il se trouve que je suis archinul en programmation linux.
On a un prof peu competent du coup je sais presque rien dans cette matiere.
Donc stp si ça ne te derange pas ça serait vraiement bien si tu peux poster la reponse entiere .
Merci d'avance et désolé pour le dérangement.
0
mamiemando Messages postés 33268 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 septembre 2024 7 781
5 juin 2008 à 19:01
Comment te dire...
- Que tu sois nul en programmation... ben j'y peux rien, moi j'essaye de te débloquer quel que soit ton niveau.
- Que ton prof soit nul... j'y peux rien non plus.
- Même si c'est vrai, il y a d'autres gens à qui tu peux demander (les autres profs, élèves etc...), ce sera même l'occasion de faire de rencontrer des gens.
- Et accessoirement comment veux-tu que je fasse la différence entre un étudiant qui est bloqué ou qui a la flemme ?

Donc ce que je te demande c'est de prendre le temps de comprendre ce que j'ai écrit car le plus dur est fait. Normalement si tu sais faire un if et que tu regardes le man de la commande chmod ça doit bien taper dans les 5 lignes à rajouter.

Bonne chance
0
jocker132 Messages postés 14 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 7 janvier 2009
5 juin 2008 à 19:15
est-ce que cette solution est juste ?


#!/bin/sh
for fichier in `ls -1 | grep -v "^total" | xargs`
do
droits="`ls -l $fichier | cut -f1 -d' '`"
echo "$fichier a les droits $droits"
if -type $fichier = f then
chmod +r $fichier
elseif -type $fichier = d
chmod +x $fichier
else chmod +rwx $fichier
fi
done
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adi3000 Messages postés 254 Date d'inscription samedi 5 août 2006 Statut Membre Dernière intervention 22 mai 2011 54
5 juin 2008 à 19:20
je fini opur conclure 3 commande qui te donneron la reponse

chmod +x //+w+r ou -x -w -r pour modifier les droit suivit du fichier
man test // page du manuel regroupant les commande test suivis apres le if dont celle du savoir si c'est un fichier ordinaire
man chmod //pour mieux comprendre la modification des droits

et aussi au fait les parametre d'une commande shell s'introduit par
$1, $2, $3 (selon le numero du parametre
$* est la liste entiere du paramètre (utile pour un "for i in $*")
$0 est le nom du programme shell
$# est le nombre de parametre entré au total

je precise que par parametre j'entend ce qu'on entre apres genre

login@localhost$ sh command.sh param1 param2 param3

bref avec tout ça en theorie tu devrais t'en sortir

0
jocker132 Messages postés 14 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 7 janvier 2009
5 juin 2008 à 19:31
Vous n'allez pas me croire mais j'y arrive pas :s
0
jocker132 Messages postés 14 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 7 janvier 2009
5 juin 2008 à 20:05
Personne pour m'aider svp ?
0
mamiemando Messages postés 33268 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 septembre 2024 7 781
6 juin 2008 à 01:26
Ca t'irait ça ?
find public_html -type d -execdir pwd \; | sort | uniq | xargs chmod 777

Pour avoir un chance ça suppose bien sûr de lire la doc :
man find
man pwd
man sort
man uniq
man xargs
man chmod

Tu peux aussi décomposer le mouvement :
find public_html -type d -execdir pwd \;
find public_html -type d -execdir pwd \; | sort 
find public_html -type d -execdir pwd \; | sort | uniq
find public_html -type d -execdir pwd \; | sort | uniq | xargs chmod 777

Bonne chance
0