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

Shell et commandes GNU Discussion :

Liste de choix


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Par défaut Liste de choix
    Bonjour à tous...

    Je dois, dans un script, lister le contenu d'un répertoire.. jusque là pas de problème... Mais j'aimerais que le résultat affiché à l'écran soit numéroté afin de pouvoir traiter le choix, et je n'y arrive pas.

    Pour résumer:
    lister le contenu du répertoire
    afficher la liste numérotée
    faire un choix parmi les fichiers en sortie...

    Comme je voudrais partir de quelque chose de simple, j'ai pensé utiliser un select dans ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select choix in $REP
    do
    break
    done
    Suivi d'un case/esac éventuellement

    Est-ce clair?
    Merci!

  2. #2
    Membre éprouvé
    Homme Profil pro
    consultant ETL
    Inscrit en
    Septembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : consultant ETL
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2008
    Messages : 97
    Par défaut
    Bonjour.

    J'ai testé ceci, et cela fonctionne chez moi. la variable contient bien le nom de fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select choix in $( ls ./) ; 
       do echo "mon choix est $choix" ; 
       break; 
    done

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    sinon il y a zenity http://doc.ubuntu-fr.org/zenity

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zenity --entry --title="Fichier" --text="Veuillez choisir le fichier" $(ls ./)
    mais ça marche plus sur pangolin

  4. #4
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    Bonjour,

    Je suis plutôt d'accord avec l'utilisation de select
    mais pas avec celle de ls

    la liste des fichiers peut-être obtenu en utilisant le Développement des chemins, et un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Rep="repertoire/de/départ"
    listeFic=( $Rep/*.extension )
    select fic in "${listeFic[@]}"
    do echo "$fic"
       break
    done
    je ne veux pas extrapoler : n'y a-t-il que des fichiers dans le répertoire, quelle action doit être accomplie, la liste doit-elle rester affichée pour effectuer d'autres actions ?...

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    gros avantage de ls c'est qu'il retourne un code erreur >0 si ton expression de fichier ne couvre aucun fichier ... alors que l'expression de fichier seule qui n'est pas résolue se renvoi elle-même et tu n'as aucun moyen de t'en rendre compte

    donc oui pour le ls


    sinon vous pouvez m'expliquer ce que do ... done fait dans vos exemples ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    je me répète, encore, ON N'UTILISE PAS ls DANS LES SCRIPTS !!!
    car si le nom de fichier comporte un espace des commandes comme for, et select "boucleront" sur chaque mot du nom de fichier.

    ne sachant pas exactement ce que veux faire nyarlath, je me contente d'afficher le nom du fichier sélctionné.

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    inutile de crier

    puisque maintenant il y a une boucle (qui n'était pas là avant ... mais soit ... vivent les boucles ...) je te conseille plutôt de travailler ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (IFS=$'\n';for fichier in $(ls *); do echo $fichier; done)
    cela t'évitera de faire une itération de boucle sur le fichier "*" qui n'existe pas

    et si ls te défrise ... utilise find

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    ha ça y est je viens de comprendre le select .... et son do done

    c'est utilisable ce truc ?


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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    tu as tout à fait raison, il y a plusieurs façons de faire, y compris la mauvaise.

    je crois que tu es d'une mauvaise foi évidente et écœurante.

    c'est utilisable ce truc ?
    non, ça a été créé exprès pour te permettre de troller davantage.

    je ne nourrirai plus le troll, tu viens d'augmenter ma liste d'indésirable; elle compte maintenant une personne.

  11. #11
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    rhooo bon ok juste un peu de mauvaise foi alors

    Je ne souhaitais point troller ni être désagréable ... et ma remarque sur le select (clairement de mauvaise foi) était pour me moquer de mon alzheimer personnel que j'ai.

    c'est vrai que l'orthodoxie dit qu'il ne faut pas utiliser le ls dans ce cas ... je reproche à la solution orthodoxe de ne pas générer d'erreur si aucun fichier n'existe (c'est surtout gênant pour le select d’ailleurs)

    l'intérêt de la syntaxe IFS est : que cela est utilisable pour toutes listes de variables texte contenant des mots (autre que fichiers) voilà pourquoi je la préfère et en ai abusé dans le passé.

  12. #12
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par mvvvv Voir le message
    inutile de crier

    puisque maintenant il y a une boucle (qui n'était pas là avant ... mais soit ... vivent les boucles ...) je te conseille plutôt de travailler ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (IFS=$'\n';for fichier in $(ls *); do echo $fichier; done)
    cela t'évitera de faire une itération de boucle sur le fichier "*" qui n'existe pas

    et si ls te défrise ... utilise find
    ducoup pourquoi le ls ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...]for fichier in * [...]
    suffit du coup ?

  13. #13
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    ls sert juste à crier au cas ou tu n'as pas de fichier

    essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select i in *yapas
    do
    echo $i
    done
    tu auras un résultat pas net du tout


    de plus passer par une commande encapsulé offre une infinité de recherches au contraire des simples expressions de fichier. Il me semble plus utile de proposer cette syntaxe (en incluant la bonne remarque sur les éléments de la liste qui ne sont pas des mots) que celle "orthodoxe" qui reste un cas très particulier et correspond à un archaisme du shell.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    ls sert juste à crier
    quand on ne sait pas faire un test ?
    commande encapsulé
    ?
    'connais pas. substitution de commande ?
    offre une infinité de recherches au contraire des simples expressions de fichier
    tu parles de find, là ? des fois on n'a pas besoin de dégainer find.
    archaïsme
    ?

  15. #15
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 196
    Par défaut
    bonne soirée


  16. #16
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Par défaut
    Ohlà merci à tous, je ne pensais pas autant déchaîner les passions!

    N_Bah, ce que je cherche à faire, c'est simplement récupérer certains fichiers par rapport à leur nom, et les envoyer sur un répertoire différent.. (donc la liste affiche les fichiers, numérotés, et l'utilisateur choisit celui qu'il veut traiter)

    En tout cas, j'essaierai toutes ces propositions dès ..ben dès que je reprends le boulot

  17. #17
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Par défaut
    Citation Envoyé par nyarlath Voir le message
    N_Bah, ce que je cherche à faire, c'est simplement récupérer certains fichiers par rapport à leur nom, et les envoyer sur un répertoire différent.. (donc la liste affiche les fichiers, numérotés, et l'utilisateur choisit celui qu'il veut traiter)
    Finalement, le select est pas si mal, mais comment faire pour que l'utilisateur choisisse un fichier à traiter parmi la liste?

    en gros, il choisit un fichier et hop, ça fait un cp (en posant une question bien sur...)

    Bon oui, je suis débutant en script au cas où ça ne se serait pas vu!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    tu adaptes : à la place de echo, tu mets cp...

    en posant une question bien sur...
    quelle question ?

  19. #19
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 28
    Par défaut
    Citation Envoyé par N_BaH Voir le message

    quelle question ?
    et bien une fois que la liste s'affiche, on demande à l'utilisateur quel fichier il veut traiter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select fic in $REP_ORIG/*
    do echo "Le fichier que vous voulez traiter est : $fic"
       echo "Voulez-vous continuer? (O/N)"
       read cont
    C'est après cette partie que je bloque et que je pensais faire un case/esac par exemple...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    un simple if test "$cont" = O; then ...; else ...; fidevrait suffire.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Vérifier une liste de choix
    Par nebule dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/12/2004, 20h06
  2. [HTML] Formulaire/menu et liste de choix
    Par TwoChipies dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/11/2004, 17h32
  3. Réponses: 8
    Dernier message: 05/05/2004, 17h28
  4. Réponses: 10
    Dernier message: 04/05/2004, 17h00
  5. liste de choix
    Par fredmessenger dans le forum ASP
    Réponses: 11
    Dernier message: 03/09/2003, 09h27

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