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 :

Menu paramétrable suivant les étapes réalisées


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Par défaut Menu paramétrable suivant les étapes réalisées
    Bonjour,

    Je cherche à faire un menu paramétrable pour que celui-ci n'affiche plus les étapes/questions déjà réalisées.
    Voici ce que je fais :
    - le script va chercher la valeur de variables E1, E2, E3.... correspondant à une action réalisée dans un fichier de configuration action_realisees.txt

    Cela fonctionne mais je me demande s'il y a moyen de faire plus simple.

    Fred M
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #!/bin/bash
     
    #Fichier de configuration qui stocke les actions réalisées. Exemple :  E1="Oui" alors l'Etape 1 n'est plus proposée.
    source action_realisees.txt
     
    #Etape 1
    Etape1()
    {
    echo "Etape 1 réalisée"
    }
     
    #Etape 2
    Etape2()
    {
    echo "Etape 2 réalisée"
    }
     
    #Etape 3
    Etape3()
    {
    echo "Etape 3 réalisée"
    }
     
    echo "========================================================================================================"
    echo "Voulez-vous réinitialiser le menu ? (o/N)"
    echo "========================================================================================================"
    read -r ETP0
    : "${ETP0:="N"}"
    if [[ ${ETP0} == [YyOo] ]]; then
            echo "Menu réinitialisé"
            echo>action_realisees.txt
            unset E1 E2 E3
    fi
     
    #Test si Etape réalisée
    if [[ ${E1} == "" ]]; then
            echo "========================================================================================================"
            echo "Etape 1 : Voulez-vous faire l'étape 1 ? (o/N)"
            echo "========================================================================================================"
            read -r ETP1
            : "${ETP1:="N"}"
            if [[ ${ETP1} == [YyOo] ]]; then
                    Etape1
                    #Etape réalisée
                    echo "E1=\"Oui\"">action_realisees.txt
            fi
    fi
     
     
    #Test si Etape réalisée
    if [[ ${E2} == "" ]]; then
            echo "========================================================================================================"
            echo "Etape 2 : Voulez-vous faire l'étape 2 ? (o/N)"
            echo "========================================================================================================"
            read -r ETP2
            : "${ETP2:="N"}"
            if [[ ${ETP2} == [YyOo] ]]; then
                    Etape2
                    #Etape réalisée
                    echo "E2=\"Oui\"">>action_realisees.txt
            fi
    fi
     
    #Test si Etape réalisée
    if [[ ${E3} == "" ]]; then
            echo "========================================================================================================"
            echo "Etape 3 : Voulez-vous faire l'étape 3 ? (o/N)"
            echo "========================================================================================================"
            read -r ETP3
            : "${ETP1:="N"}"
            if [[ ${ETP3} == [YyOo] ]]; then
                    Etape3
                    #Etape réalisée
                    echo "E3=\"Oui\"">>action_realisees.txt
            fi
    fi

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Fred01 Voir le message
    Cela fonctionne mais je me demande s'il y a moyen de faire plus simple.
    Plus simple je ne sais pas (le shell ce ne sera jamais que du shell quoi). Mais il y a quand-même moyen de faire plus propre que ce fichier se comportant à la fois comme mémoire de ce qui a été fait et à la fois comme code shell obligé alors d'être "sourcé" pour être pris en considération.
    Il existe des fichiers spécialement dédiés à garder des infos de configuration. Je pense par exemple aux fichiers ".ini" qui peuvent se diviser en chapitres individuels et dont certains langages, comme Python, possèdent des librairies dédiées à leur manipulation.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    pour faire plus propre, tu peux déjà enlever toutes les accolades inutiles.

    je ferais un bête compteur, parce que je n'imagine pas qu'on puisse exécuter l'étape 2 sans avoir préalablement exécuté l'étape 1 !
    le fichier serais lu au début du script, et on passe directement à l'étape suivante...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    pour faire plus propre, tu peux déjà enlever toutes les accolades inutiles.
    J'ai pensé au début que tu parlais des accolades des fonctions et là je me disais "mais on ne peut pas les enlever"...
    Ensuite j'ai compris que tu parlais des accolades des variables
    Oui souvent le débutant pense que ce sera plus "professionnel" si on les met tout le temps (en tout cas c'est ce que j'ai pensé moi quand je commençais le shell ) mais finalement il se rend compte que c'est juste plus... chiant

    Pour les fonctions moi je remplacerais les accolades (puisque tu en as parlé) par des parenthèses. Ca rend la fonction "isolée" du reste du code (pas de conflit/collision entre les variables dans les fonctions et les variables du code).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    oui, je parle des variables.

    on peut aussi restreindre leur portée à la seule fonction en les déclarant avec local.

    dans certains cas, les accolades des fonctions sont facultatives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ maFonc() for i in {1..5}; do echo $i; done
    $ maFonc
    1
    2
    3
    4
    5
    $ maFonc ((1>2?1:0))
    $ maFonc; echo $?
    1
    $
    etc.
    puisque la syntaxe d'une fonction est
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fname () commande-composée [redirection]
    ou
    function fname [()] commande-composée[redirection]
    cf. man bash /commandes composées
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Par défaut
    Merci de vos retours.
    J'ai viré des accolades dans mes variables et mis des parenthèses à mes fonctions !
    J'ai aussi tenté de mettre une boucle sachant que les étapes ne se font pas forcément dans l'ordre...
    Mon test sur la variable ne fonctionne pas !
    Dans un IF, je veux tester la valeur de E1, E2, E3... en utilisant la variable incrémentée $cpt. Il me faut donc ajouter un "E3 mais je n'ai pas la bonne syntaxe à priori :
    if [[ ${E($cpt)} == "" ]]; then.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #!/bin/bash
     
    #Fichier de configuration qui stocke les actions réalisées. Exemple :  E1="Oui" alors l'Etape 1 n'est plus proposée.
    source action_realisees.txt
     
    #Etape 1
    Etape1()
    (
    echo "========================================================================================================"
    echo "Etape 1 : Voulez-vous faire l'étape 1 ? (o/N)"
    echo "========================================================================================================"
    read -r ETP1
    : "${ETP1:="N"}"
    if [[ $ETP1 == [YyOo] ]]; then
     
          echo "Etape 1 réalisée"
     
          #Etape réalisée
          echo "E1=\"Oui\"">>action_realisees.txt
    fi
    )
     
    #Etape 2
    Etape2()
    (
    echo "========================================================================================================"
    echo "Etape 2 : Voulez-vous faire l'étape 2 ? (o/N)"
    echo "========================================================================================================"
    read -r ETP2
    : "${ETP2:="N"}"
    if [[ $ETP2 == [YyOo] ]]; then
     
          echo "Etape 2 réalisée"
     
          #Etape réalisée
          echo "E2=\"Oui\"">>action_realisees.txt
    fi
    )
     
    #Etape 3
    Etape3()
    (
    echo "========================================================================================================"
    echo "Etape 3 : Voulez-vous faire l'étape 3 ? (o/N)"
    echo "========================================================================================================"
    read -r ETP3
    : "${ETP3:="N"}"
    if [[ $ETP3 == [YyOo] ]]; then
     
          echo "Etape 3 réalisée"
     
          #Etape réalisée
          echo "E3=\"Oui\"">>action_realisees.txt
    fi
    )
     
    echo "========================================================================================================"
    echo "Voulez-vous réinitialiser le menu ? (o/N)"
    echo "========================================================================================================"
    read -r ETP0
    : "${ETP0:="N"}"
    if [[ $ETP0 == [YyOo] ]]; then
            echo "Menu réinitialisé"
            echo>action_realisees.txt
            unset E1 E2 E3
    fi
     
     
    #Boucle d'appel des différentes étapes
    cpt=0
    while [[ "$cpt" < 3 ]]
       do
         ((cpt=cpt+1))
         #Mon test sur la variable ne fonctionne pas ! Je veux tester sur E1, E2, E3... en utilisant $cpt
         if [[ ${E($cpt)} == "" ]]; then
         Etape$cpt
        fi
        done
       exit 0

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Menu affichage différent suivant les navigateurs
    Par Marc31 dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 08/02/2017, 08h49
  2. probleme menu et css suivant les navigateurs...
    Par emile13 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 27/01/2006, 04h04
  3. Probleme menu démarré tous les programmes
    Par tiboooo dans le forum Windows XP
    Réponses: 3
    Dernier message: 17/11/2005, 14h48
  4. Enumérer les TAPEs
    Par Amri_Daly dans le forum Windows
    Réponses: 1
    Dernier message: 31/10/2005, 17h09
  5. Action différente suivant les droits
    Par JMLD dans le forum XMLRAD
    Réponses: 2
    Dernier message: 27/04/2005, 17h25

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