Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/09/2016, à 21:08

Synerz

affiche l’arborescence des sous-répertoires sous forme d'une liste

Bonjour,

Je dois réaliser un script pour les cours, je ne veux pas la réponse mais plutôt une aide afin de m'orienter.
Voila ce que je dois faire :


Écrire un script ftree qui affiche l’arborescence des sous-répertoires d’un répertoire donné, sous forme d'une liste indentée (c'est-à-dire avec des décalages variant avec la profondeur de l'arbre). Exemple de résultat attendu :

$ ftree $HOME
/home/toto/
  /home/toto/bin/
...

 
Pour écrire ce script qui est un (simple) parcours d’arbre n-aire, on utilisera la possibilité qu'offre le shell d'écrire des fonctions, illustrée par le script fonction, et qui plus est, récursives. Plus précisément, on commencera par définir une fonction récursive affiche (à l'image de la fonction ma_fonction du script fonction) qui

    -affiche le nom du répertoire courant précédé d'une chaîne d'indentation reçue en paramètre ($1)
    -réalise une itération qui parcourt toutes les entrées du répertoire courant et pour chaque sous-répertoire que nous pouvons traverser et qui n'est pas un lien symbolique :
        -se positionne sur ce sous-répertoire;
        -réalise un appel récursif avec une chaîne d'indentation augmentée de 2 espaces ;
        -puis remonte dans le répertoire courant.
    Si l'on ne peut traverser un sous-répertoire ou si ce dernier est un lien symbolique, on se contente d'écrire son nom précédé de la chaîne d'indentation augmentée de 2 espaces.

On écrira alors les lignes qui seront exécutées en premier par le script où il s'agira de

    -vérifier qu'il y a 0 ou 1 paramètre qui a été passé au script et écrire un message dans le cas contraire;
    -si aucun paramètre n'a été passé, le répertoire qui sera affiché est le répertoire courant, sinon on vérifie que le paramètre est bien un répertoire et on s'y positionne (cd) pour qu'il devienne le répertoire courant;
    -il ne reste plus qu'à appeler la fonction affiche qui va traiter récursivement le répertoire courant avec en unique paramètre la première chaîne d'indentation : la chaîne vide.

Sauf que je n'ai aucune idée de quoi faire.. cela fais plusieurs heures que je cherche mais je n'ai toujours rien écris...
Je sais qu'il me faut une boucle et une fonction mais bon..

J'aimerai un peu d'aide afin d'avancer un minimum..

Merci d'avance

Hors ligne

#2 Le 28/09/2016, à 21:56

soshy

Re : affiche l’arborescence des sous-répertoires sous forme d'une liste

Je sais qu'il me faut une boucle et une fonction mais bon..

C'est déjà un début smile
Il y a toujours 2 questions à chaque étape, le "quoi" et le "comment".

Exemple : Faire une boucle, très bien ! mais elle doit faire quoi ?! Compter jusqu'à 10... Ok, maintenant comment on fait ? ...

Donc commence par faire simple, puis complique au fur et à mesure.

Plus précisément, on commencera par définir une fonction récursive affiche (à l'image de la fonction ma_fonction du script fonction) qui

    -affiche le nom du répertoire courant précédé d'une chaîne d'indentation reçue en paramètre ($1)

Commence simple : faire un script qui appel une fonction (qui dit "hello world" pour vérifier que ça fonctionne)
Puis complique : la fonction doit afficher le nom du répertoire courant, et plus "hello world".
Puis complique : la fonction doit  afficher le nom du répertoire courant précédé du paramètre $1.
etc... Jusqu'à ce que tous les éléments demandés soient présent.

Dernière modification par soshy (Le 28/09/2016, à 21:58)

Hors ligne

#3 Le 28/09/2016, à 22:10

Synerz

Re : affiche l’arborescence des sous-répertoires sous forme d'une liste

Le truc c'est que j'ai jamais fais de shell donc il y a plein de truc que je ne comprends pas. Je n'ai fais que de la programmation style php/perl/python et encore pas des truc foufou.

Par exemple : " la fonction doit  afficher le nom du répertoire courant précédé du paramètre $1." bah je comprends pas trop la phrase.

En tout cas merci de ta réponse smile

Hors ligne

#4 Le 28/09/2016, à 22:17

soshy

Re : affiche l’arborescence des sous-répertoires sous forme d'une liste

afficher quelque chose en shell

echo "hello world !"

commande qui permet d'afficher le répertoire courant:

pwd

variable qui contient le répertoire courant : $PWD
donc

echo "$PWD" 

ça donne la même chose que la commande précédente.

En shell, tu peux appeler une fonction comme ça (c'est mieux d'utiliser les ""):

mafonction "param1" param2 param3

et dans une fonction, $1 c'est le premier paramètre qui a été passé. $2, le 2ème, etc...
Chaque espace lors de l'appel c'est un nouveau paramètre.

mafonction hello world

$1 vaudra: hello
$2 vaudra: world

mafonction "hello world"

$1 vaudra: hello world
$2 n'existe pas ici.

C'est pour ça que c'est mieux d'utiliser les "".

Dernière modification par soshy (Le 28/09/2016, à 22:21)

Hors ligne

#5 Le 29/09/2016, à 09:27

Synerz

Re : affiche l’arborescence des sous-répertoires sous forme d'une liste

Merci pour ton aide je vais essayer avec ça smile

Hors ligne

#6 Le 29/09/2016, à 09:50

pingouinux

Re : affiche l’arborescence des sous-répertoires sous forme d'une liste

Bonjour,
Si tu coinces, n'hésite pas à montrer ce que tu as déjà fait.

Ajouté :
Pour arrêter le script à la première erreur, je te conseille d'ajouter au début

set -e

Les appels récursifs peuvent être redoutables en cas d'erreur (blocage de l'ordinateur).

Dernière modification par pingouinux (Le 29/09/2016, à 09:55)

Hors ligne