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 :

Regrouper 2 fonctions


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut Regrouper 2 fonctions
    Bonjour,
    Le but est d'afficher une liste de fichier, d'en choisir 1 puis de le traiter par la suite.
    Je cherche a faire ça dans une seule fonction mais pas moyen car je récupère le nom du fichier avec un echo.
    L'affichage du menu avec echo perturbe le fonctionnement et rien ne s'affiche à l'écran
    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
    aff_menu(){
    	! [ -f "$1" ] && { return 1 ; }
    	echo -n \\n
    	while [ ${temp_aff_menu-0} -lt $# ] ; do
    		temp_aff_menu=$(( temp_aff_menu + 1 ))
    		echo -n "$temp_aff_menu : "		
    		eval echo \$$temp_aff_menu
    	done
    	echo \\n"quel fichier ? [ 1 - $# ]"
    	echo -n \\n"votre choix : "
    }
     
    choix_menu(){
    	read temp_choix_menu
    	case $temp_choix_menu in
    		[1-$#]) echo $(eval echo \$"$temp_choix_menu") ;;
    		*) return 1
    	esac
    }
     
    type_file=*.cue
    aff_menu $type_file
    [ $? -eq 1 ] && { echo ko ; exit ;} || retour=$(choix_menu $type_file)
    [ $? -eq 1 ] && { echo ko ; exit ;} || echo $retour
    Si quelqu'un avait une piste.
    Merci
    ctac

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

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

    en général, quand on en vient à utiliser eval, c'est que l'algo. a du plomb dans l'aile. :/

    <hs>
    ! [ -f "$1" ] && { return 1 ; } : si *.cue est développer en plusieurs fichiers ça échouera
    echo -n \\n : ça voudrait afficher une nouvelle ligne alors que l'option -n dit de ne pas afficher de nouvelle ligne. :/
    ...
    </hs>
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ! [ -f "$1" ] && { return 1 ; } : si *.cue est développer en plusieurs fichiers ça échouera
    je ne comprend pas.
    s'il n'y a aucun fichier $1 = *.cue ce qui n'est pas 1 fichier donc return 1 --> erreur
    s'il y a 1 ou plusieurs fichier $1 est un fichier donc on affiche le nom du fichier --> pas d'erreur

    Citation Envoyé par N_BaH Voir le message
    echo -n \\n : ça voudrait afficher une nouvelle ligne alors que l'option -n dit de ne pas afficher de nouvelle ligne. :/
    echo \\n m'affiche 2 lignes vides d'ou le -n

    Citation Envoyé par N_BaH Voir le message

    en général, quand on en vient à utiliser eval, c'est que l'algo. a du plomb dans l'aile. :/
    C'est quoi le problème avec eval ?
    J'ai vu plusieurs fois des remarques par rapport a son utilisation.
    Quelle alternative ?
    je peux avoir uniquement $1 ou $1 a $n
    il faudrait tester chaque cas, si $n est vide --> break

    cordialement.
    ctac

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    echo \\n m'affiche 2 lignes vides d'ou le -n
    et tu veux n'en afficher qu'une ? => echo et c'est tout.
    ksh n'étant pas le shell par défaut, ou privilégié, sur NGU/Linux, c'est bien de préciser son emploi.

    Quelle alternative ?
    je ne comprend pas bien ton problème.
    Le but est d'afficher une liste de fichier, d'en choisir 1 puis de le traiter par la suite.
    le code me paraît bien compliqué pour une tâche aussi simple.
    pourquoi ne pas utiliser select avec le développement de chemin des fichiers à traiter ?
    select fichier in ./*.cue...
    ou une simple boucle for ?
    ou un tableau listeFic=( ./*.cue ), c'est facile à afficher, à référencer...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    C'est bon pour le echo.
    Pourquoi faire simple quand on peut faire compliqué

    ksh? je suis sur debian testing avec bash.
    mes scripts sont en #!/bin/sh donc tournent avec dash.
    Pas de select ni de tableaux.

    En principe, le fichier cue est passé en paramètre au script mais ...
    j'en ai qui commence comme ça : Линда
    Mon clavier n'a qu'une centaine de touche et ne me propose pas ce genre de caractères.

    J'avais fait une boucle for puis je me suis dit que je pourrais faire une fonction a placer dans une bibliothèque donc réutilisable
    d'où le code présenté et mon embarras d'avoir 2 fonctions.

    Je ne voie pas le problème avec eval.
    Si quelqu'un a une explication ou un lien.
    Merci.

    ctac

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    eval c'est mal
    tout ce qui lui est passé est ... evalué.
    il y a probablement une page sur le wiki des bash hackers, ou celui de greg wooledge.
    si j'en arrive à devoir utiliser eval, je cherche un contournement, jusqu'à changer de langage.
    je n'utilise quasiment que bash, et je passe à gawk par souci de performances.
    je garde dash pour lister quelques commandes externes.

    à propos de ton script :
    tu remplaceras avantageusement les echo -n par printf.
    le case ne fonctionnera pas s'il y a plus de 9 fichiers; tu trouveras facilement (vu ce que tu as déjà fait) une autre manière de tester si la variable est un nombre ou pas.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. regroupement de fonctions
    Par Alexdezark dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/11/2008, 13h03
  2. regroupement en fonction de critères
    Par hota02 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/12/2007, 15h44
  3. regrouper les fonctions du head
    Par stars333 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/06/2007, 22h29
  4. Regroupement en fonction des 8 premiers caractères
    Par 306xshdi dans le forum Access
    Réponses: 4
    Dernier message: 06/11/2005, 10h18

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