Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/11/2010, 21h37   #1
 
chiheb ammar
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : chiheb ammar

Informations forums :
Inscription : mai 2010
Messages : 13
Points : -1
Points : -1
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.
chiheb205 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/11/2010, 23h49   #2
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 375
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

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

Informations forums :
Inscription : octobre 2008
Messages : 1 375
Points : 2 031
Points : 2 031
De rien
matafan est déconnecté   Envoyer un message privé Réponse avec citation 21
Vieux 25/11/2010, 15h02   #3
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 950
Points : 4 950
Cette commande est originale, ouvre la voie du projet. Mais, on ne doit pas faire son exercice à sa place
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 15h16   #4
 
chiheb ammar
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : chiheb ammar

Informations forums :
Inscription : mai 2010
Messages : 13
Points : -1
Points : -1
Je suis en impasse.
Aidez-moi s il vous plais.

Pouvez-vous me mettre sur la voie ? (merci)
chiheb205 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 15h36   #5
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 950
Points : 4 950
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 :
for fich in *;do echo $fich;done
avec des tests dans le for.
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/11/2010, 16h31   #6
 
chiheb ammar
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : chiheb ammar

Informations forums :
Inscription : mai 2010
Messages : 13
Points : -1
Points : -1
Où sont les commandes indiqué s'il vous plait ? (merci)
chiheb205 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 16h44   #7
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 375
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

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

Informations forums :
Inscription : octobre 2008
Messages : 1 375
Points : 2 031
Points : 2 031
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.
matafan est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/11/2010, 19h25   #8
 
chiheb ammar
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : chiheb ammar

Informations forums :
Inscription : mai 2010
Messages : 13
Points : -1
Points : -1
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)
chiheb205 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 19h37   #9
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 971
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 971
Points : 5 935
Points : 5 935
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 :
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 02h35   #10
 
chiheb ammar
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : chiheb ammar

Informations forums :
Inscription : mai 2010
Messages : 13
Points : -1
Points : -1
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
chiheb205 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 08h43   #11
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 971
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 971
Points : 5 935
Points : 5 935
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2010, 02h22   #12
 
chiheb ammar
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : chiheb ammar

Informations forums :
Inscription : mai 2010
Messages : 13
Points : -1
Points : -1
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 :
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é
chiheb205 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2010, 05h43   #13
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 057
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 057
Points : 4 107
Points : 4 107
en français :
http://eric-sanchis.developpez.com/linux/shell/bash/
http://guidespratiques.traduc.org/gu...ers-Guide.html
http://abs.traduc.org/downloadmanuel.html

en anglais :
http://mywiki.wooledge.org/BashGuide
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/11/2010, 12h50   #14
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 971
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 971
Points : 5 935
Points : 5 935
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 :
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
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 06h55   #15
 
chiheb ammar
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : chiheb ammar

Informations forums :
Inscription : mai 2010
Messages : 13
Points : -1
Points : -1
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 :
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 !!!!!!!!
chiheb205 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 11h05   #16
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 057
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 057
Points : 4 107
Points : 4 107
Bonjour,

Code :
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 :
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.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h20.


 
 
 
 
Partenaires

Hébergement Web