Aidez moi svp programmation shell

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. Modérateur
    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
    1. 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

      1. 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
        1. Modérateur
          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
          1. 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.
            1. Modérateur
              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