Aidez moi svp programmation shell

jocker132 Messages postés 14 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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.
Configuration: Windows XP
Internet Explorer 6.0

8 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  2. jocker132 Messages postés 14 Statut Membre
     
    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
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  4. jocker132 Messages postés 14 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. adi3000 Messages postés 254 Date d'inscription   Statut Membre Dernière intervention   54
     
    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
  7. jocker132 Messages postés 14 Statut Membre
     
    Vous n'allez pas me croire mais j'y arrive pas :s
    0
  8. jocker132 Messages postés 14 Statut Membre
     
    Personne pour m'aider svp ?
    0
  9. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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