IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

construire les commandes sort et ls


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut construire les commandes sort et ls
    Bonjour.

    En fait je suis en trains de faire un projet en shell (faire le tri du contenu d'un répertoire).

    Le problème c'est de faire ce tri sans utiliser la commande sort et listé la contenu de la répertoire sans la commande ls.

    Il me faudrait donc construire les commandes sort et ls.

    Merci de m'aider.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 602
    Points : 7 837
    Points
    7 837
    Par défaut
    Cette commande est originale, ouvre la voie du projet. Mais, on ne doit pas faire son exercice à sa place

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Je suis en impasse.
    Aidez-moi s il vous plais.

    Pouvez-vous me mettre sur la voie ? (merci)

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 602
    Points : 7 837
    Points
    7 837
    Par défaut
    Je ne connais pas grand chose en script shell, mais, as-tu essayé la commande indiquée ? Elle liste tous les fichiers et répertoires du dossier; Ce sera par là que tu va remplir une liste avec tous les éléments.
    Après un if [ -f "$1" ] peut te dire si c'est un fichier un elif [ -r "$1" ] un répertoire. Ceci dit, si un nom contient un espace, je ne vois comment faire...

    Peut être alors en code un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for fich in *;do echo $fich;done
    avec des tests dans le for.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Où sont les commandes indiqué s'il vous plait ? (merci)

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Bon écoutes si tu veux de l'aide il va falloir faire un effort pour t'exprimer plus clairement et poser des questions plus précises.

    Est-ce que tu sais déjà répondre aux questions suivantes :
    - Dois-tu afficher tous les fichiers ou seulement certains fichiers (pense aux fichiers qui commencent par un point par exemple)
    - Quelles informations veux-tu afficher
    - Sur quel critère veux-tu trier
    - Dois-tu proposer des flags pour permettre à l'utilisateur de choisir les fichiers à afficher, les informations à afficher, et le critère de tri

    Une fois que tu sais répondre à ces questions, lance toi et commence à coder quelque chose. Si tu bloques sur un problème particulier, pose une question sur ce problème particulier.

    J'ai la vague impression de passer plus de temps à te répondre que tu n'as passé de temps à réfléchir à ton problème.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Ce je sait, c'est faire un trie avec sort et ls pour lister.

    Je suis bloqué parce que je n'ai pas le droit de les utiliser... Il y a t-il un autre moyen ? (merci)

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Bonsoir.

    As-tu seulement essayé de produire quelque chose à partir des pistes qui t'ont été données ?

    Citation Envoyé par matafan Voir le message
    et

    Citation Envoyé par troumad Voir le message
    Je ne connais pas grand chose en script shell, mais, as-tu essayé la commande indiquée ? Elle liste tous les fichiers et répertoires du dossier; Ce sera par là que tu va remplir une liste avec tous les éléments.
    Après un if [ -f "$1" ] peut te dire si c'est un fichier un elif [ -r "$1" ] un répertoire. Ceci dit, si un nom contient un espace, je ne vois comment faire...

    Peut être alors en code un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for fich in *;do echo $fich;done
    avec des tests dans le for.
    De plus, certaines questions t'ont été demandée et auxquelles tu n'as pas répondu :

    Citation Envoyé par matafan Voir le message
    Est-ce que tu sais déjà répondre aux questions suivantes :
    - Dois-tu afficher tous les fichiers ou seulement certains fichiers (pense aux fichiers qui commencent par un point par exemple)
    - Quelles informations veux-tu afficher
    - Sur quel critère veux-tu trier
    - Dois-tu proposer des flags pour permettre à l'utilisateur de choisir les fichiers à afficher, les informations à afficher, et le critère de tri
    Merci d'y répondre dans la mesure du possible, et d'essayer de produire quelque chose (au moins d'y réfléchir) .

    Cordialement,
    Idriss

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    il ya t il une idée pour faire un trie décroissane suivant le nom des entrée
    par exemple dans la repertoire toto il ya titi.txt et fic.txt
    c est que je voudrai faire c est d afficher l arborecence de repertoire toto avec le trie biensur et sans la commande sort

    comme ca

    ./home/shell/projetshell/toto/titi.txt
    ./home/shell/projetshell/toto/fic.txt




    le début c est toujours flou juis sur que ca ira

    merci

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Bonjour.

    Une piste : bash gère les tableaux à une dimension. Tu peut donc, grâce à ce que troumad et matatan t'ont donné, placer les noms des fichiers d'un répertoire dans un tableau.

    Tu parcourir ce tableau (et afficher son contenu) en commençant par la fin (car il sera déjà trié dans l'ordre croissant).

    Cordialement,
    Idriss

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Voila j'ai une essai : un tri suivant le nom des entrées, en gros j'ai deux fichier
    fic.txt qui contient le le contenu de ls et le deuxième le trie de fic.txt
    pour parcourir le fichier fic.txt j'ai utilisé for %f %i in(fic.txt) do (j'ai trouvé ça dans les forums) et je commence à comparé un par par un et je dirige le plus petit vers fichier Trier.txt (je voudrai faire un trie décroissant) et à la fin j'affiche le fichier less.txt
    ça ne marche pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/bin/bash
    TriesuivantleNomEntre()
    {
    for fich in *;do echo $fich>>fic.txt;done
    for %f %i in(fic.txt) do 
    min=$i
    if(expr `$i +1`\<$min)
    then
     
    echo $min>> fichierTrier.txt
    else
    echo $i>>fichierTrier.txt
    fi
    done
    less fichierTrier.txt
    }
    TriesuivantleNomEntre()
    Merci de m'avoir aidé

  13. #13
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 466
    Points
    19 466

  14. #14
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Bonjour.

    Tu te complique la tâche avec ces fichiers je pense ... la solution est toute simple. J'ai simplifié ce que je t'avais proposé comme solution : tu parcours un répertoire (placé en paramètre ou saisis comme tu le souhaites) et tu place les valeurs dans un tableau (grâce à la boucle qu'on t'as déjà donné). Ensuite, tu affiche les valeurs du tableau en partant de la fin de celui-ci ...

    Voici un exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/bin/bash
     
    # Si on a au moins un paramètre et que le premier paramètre est un répertoire
    if [ $# -ge 1 ] && [ -d $1 ]
    then
        cd $1 # on va dans ce répertoire
    fi
     
    nb=0 # initialisation du nombre d'éléments
     
    # on parcours le répertoire courant et on place les nom de ses éléments dans un tableau
    for fichier in *
    do
        tab[$nb]=$fichier # on place le nom du fichier dans une case du tableau
        let nb=$nb+1
    done
     
    # affichage inversé
    for (( i=$nb ; i>=0 ; i=$i-1 )) 
    do
        echo ${tab[$i]}
    done
    Cordialement,
    Idriss

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    j ai une idée c est de utiliser deux listes
    Principe: on parcours la liste de départ et on cherche le plus grand élément
    Dès qu'on a trouvé le plus grand élément, on le stocke dans la seconde liste et on le supprime de la première et on
    recommence l'algo. Au second parcours, le plus grand élément n'étant plus dans la liste de départ, il ne sera pas pris en compte et on aura le 2° plus grand élément qui sortira. Lui-même étant ajouté à la liste 2, au 3° parcours on aura le 3° plus grand élément qui sortira etc etc etc.

    On s'arrête quand la liste 1 est vide. La liste 2 contient alors tous les éléments dans l'ordre...

    comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/bin/bash
     
    i=0
      for mot  in bleu blanc rouge
      do
          liste[$i]="$mot"
            i=`expr $i + 1`
        echo $mot
      done
        min=${liste[0]}
      while("${liste[@]}")
    #tanque la liste est pleine alors 
      do
        for elt in "${liste[@]}"; 
        do
            if ( test $min \> ${liste[elt]} )
            then
            min=${liste[elt]}
            fi
        done
        liste2[$j]="$min"
        unset ${liste[elt]}
     done
     for elt in "${liste[@]}"; do echo $elt;done
    j ai des bugs dans le code !!!!!!!!

  16. #16
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 466
    Points
    19 466
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    Arr=( $@ )
     
    flag=1
     
    while (( flag ))
    do flag=0
       for (( i=0; i<${#Arr[@]}; i++ ))
       do if [[ "${Arr[i]}" < "${Arr[i+1]}" ]]
          then temp="${Arr[i]}"
               Arr[i]="${Arr[i+1]}"
               Arr[i+1]="$temp"
               flag=1
          fi
       done
    done
     
    printf '%s\n' "${Arr[@]}"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    chmod u+x mon_Script
    ./mon_Script bleu blanc rouge
    rouge
    bleu
    blanc
    ouvre le lien "poser des parpaings en cadence" : il y a un chapitre sur le tri à bulle.

Discussions similaires

  1. [DOS] Les commands
    Par charaf dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 19/01/2006, 13h28
  2. Commande sort
    Par Spyco dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 19/01/2006, 10h53
  3. [MS-DOS] Les commandes
    Par l@rry dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 10/01/2005, 14h18
  4. [TogetherDesignerCE] Construire les Use case UML2
    Par jacma dans le forum Autres
    Réponses: 3
    Dernier message: 10/09/2004, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo