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 :

Aide programme en SHELL


Sujet :

Linux

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut Aide programme en SHELL
    Bonjour,

    Je suis débutant en linux et SHELL aussi ,
    J'ai effectué des petits programmes en .sh, mais je me suis aperçu que je faisais comme du langage C vu la syntaxe avec laquelle je programme, Donc je n'apprends rien de nouveaux dans le SHELL.

    Est-ce que vous pouvez m'aider sur ce programme ? je ne sais pas comment commencer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Ecrire un script qui:
    -Si on ne lui donne aucun paramètre, affiche le fichier courant.
    -Si on lui passe 1 paramètre le contenue du fichier si c'est un fichier, si c'est un répertoire, affiche le contenu du répertoire, sinon affiche un message d'erreur.
    -Si 2 paramètres, le script doit copier le contenu du premier paramètre à la fin du second.
    -Si plus de paramètre afficher un message d'erreur.
    Est-ce que je dois créer une fonction qui fait ça (comme en C,C++)?

    Merci beaucoup,

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    bonjour,

    en effet, il serait plus malin d'écrire une fonction, plutôt que de réécrire les mêmes tests pour chaque cas.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    merci pour votre confirmation , vous avez une idée qu'est-ce que je vais écrire (pamarètres, le corps de la fonction...).

    Je suis vraiment perdu

  4. #4
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par seanbean Voir le message
    Bonjour,

    merci pour votre confirmation , vous avez une idée qu'est-ce que je vais écrire (pamarètres, le corps de la fonction...).

    Je suis vraiment perdu
    Avant d'écrire, il peut être utile de lire.

    Je suggère par exemple : Guide avancé d'écriture des scripts Bash, Une exploration en profondeur de l'art de la programmation shell
    Et des recherches avec ton moteur préféré peuvent apporter beaucoup de réponses. Évidemment, ça demande un peu de temps et de travail...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Merci pour le lien ,
    J'ai lu beaucoup de tutoriel et je comprends leurs cours, le problème c'est dans les exemples qu'ils fournissent.
    La preuve c'est que j'ai lu pas mal de cours, et je n'arrive pas à faire cet exo de base
    Pas de commentaire, ni explication.
    Les tutos Shell sur internet sont trop mauvais, je suis déçu

  6. #6
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Une piste : Ce problème est un problème de ce que l'on appelle les paramètres positionnels
    Avec des exemples instructifs à essayer.
    L'avantage des tutos en ligne, c'est qu'on peut essayer les exemples en copiant collant le code. Mais attention : il faut savoir un peu ce que l'on fait.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Merci tu m'as bien aidé !!
    C'est bien expliqué aussi
    Je viens de finir ce programme et il marche nickel
    Sauf une PETITE question: copier le contenu d'un fichier à la fin d'un autre ???

    voilà le code:
    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
     
    #!/bin/bash
    if [ $# -eq 0 ]; then
    pwd
    elif [ $# -eq 1 ]; then
    if [ -f $1 ]; then
    cat "$1"
    elif [ -d $1 ]; then
    ls -l $1
    fi
    elif [ $# -eq 2 ]; then
    echo "Copier le contenu du premier à la fin du second"
    else
    echo "ERREUR vos parametres sont nombreus !"
    fi
    Merci

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Quelle commande pour copier le contenu d'un fichier à la fin d'un autre ?
    thnks!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    s'il y a deux paramètres, à ce que j'ai compris, il n'est pas dit qu'ils soient tous les deux des fichiers. Il faudrait répéter les tests dans ce cas là aussi.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    T'as un bon esprit d'analyse N_BAH
    voilà le nouveau, c'est testé et ça marche d'après mon raisonnement lol :

    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
    if [ $# -eq 0 ]; then
    pwd
    elif [ $# -eq 1 ]; then
    if [ -f $1 ]; then
    cat $1
    elif [ -d $1 ]; then
    ls -l $1
    fi
    elif [ $# -eq 2 ]; then
    if [ -d $1 ] || [ -d $2 ]; then
    echo "Il nous faut des fichiers !"
    else
    echo "Copier le contenu du premier à la fin du second"
    fi
    else
    echo "ERREUR vos parametres sont nombreuses !"
    fi

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    maintenant que tu vois que tu effectues les mêmes tests sur différents paramètres, il s'agit de les "factoriser" dans une fonction, que tu appelleras pour les cas où il y a 1 ou 2 paramètres :
    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    définir fonctionTest, telle que
       si son premier paramètre est un répertoire, alors afficher ses sous-répertoires et fichiers
       si son premier paramètre est un fichier, alors afficher son contenu
       passer au paramètre suivant
       si existe un paramètre suivant, alors appeler fonctionTest avec ce paramètre suivant
    fin-fonctionTest
     
    au cas où $# vaut
       0 -> afficher $PWD
       1 -> fonctionTest $1
       2 -> fonctionTest $2 $1
       autre -> afficher ERREUR
    finCas
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par seanbean Voir le message
    T'as un bon esprit d'analyse N_BAH
    voilà le nouveau, c'est testé et ça marche d'après mon raisonnement lol :

    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
    #!/bin/bash
    if [ $# -eq 0 ]; then
    pwd
    elif [ $# -eq 1 ]; then
    if [ -f $1 ]; then
    cat $1
    elif [ -d $1 ]; then
    ls -l $1
    fi
    elif [ $# -eq 2 ]; then
    if [ -d $1 ] || [ -d $2 ]; then
    echo "Il nous faut des fichiers !"
    else
    echo "Copier le contenu du premier à la fin du second"
    fi
    else
    echo "ERREUR vos parametres sont nombreuses !"
    fi
    Salut

    J'ai 5 remarques sur ton script
    1) Essaye d'indenter afin de mieux t'y retrouver (et nous aussi)

    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
    #!/bin/bash
    if [ $# -eq 0 ]; then
        pwd
    elif [ $# -eq 1 ]; then
        if [ -f $1 ]; then
            cat $1
        elif [ -d $1 ]; then
            ls -l $1
        fi
    elif [ $# -eq 2 ]; then
        if [ -d $1 ] || [ -d $2 ]; then
            echo "Il nous faut des fichiers !"
        else
            echo "Copier le contenu du premier à la fin du second"
        fi
    else
        echo "ERREUR vos parametres sont nombreuses !"
    fi
    2) essaye d'utiliser les connecteurs du test plutôt que de l'appeler 2 fois. Et donc remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ -d $1 ] || [ -d $2 ]; then
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ -d $1 -o -d $2 ]; then
    3) le test précédent ne détecte pas que t'as pas de fichier, il détecte juste si t'as des répertoires. Or tu peux très bien ne pas avoir de fichiers (sous-entendu "ordinaires") mais ne pas avoir de répertoires non plus (il reste aussi les liens symboliques, les fichiers spéciaux, les pipes, etc.)

    Voici le test que t'aurais dû écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ ! -f $1 -o ! -f $2 ]; then
    4) si jamais t'as un fichier avec un espace dans son nom, plus rien ne fonctionnera. Essaye de prendre l'habitude d'encadrer le nom des fichiers par des guillemets...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ ! -f "$1" -o ! -f "$2" ]; then
    5) en cas de 2 fichiers, le script doit copier le contenu du premier dans le second... et non afficher qu'il copie (sans le faire)...

    Citation Envoyé par N_BaH Voir le message
    maintenant que tu vois que tu effectues les mêmes tests sur différents paramètres, il s'agit de les "factoriser" dans une fonction, que tu appelleras pour les cas où il y a 1 ou 2 paramètres :
    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    définir fonctionTest, telle que
       si son premier paramètre est un répertoire, alors afficher ses sous-répertoires et fichiers
       si son premier paramètre est un fichier, alors afficher son contenu
       passer au paramètre suivant
       si existe un paramètre suivant, alors appeler fonctionTest avec ce paramètre suivant
    fin-fonctionTest
     
    au cas où $# vaut
       0 -> afficher $PWD
       1 -> fonctionTest $1
       2 -> fonctionTest $2 $1
       autre -> afficher ERREUR
    finCas
    Ouais l'idée est super bonne surtout dans le cadre d'un apprentissage. Mais les actions à faire ne sont pas les mêmes suivant qu'il y a 1 ou 2 paramètres. Mais effectivement ça peut faire le cas d'un nouveau TP...
    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]

  13. #13
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par seanbean Voir le message
    Quelle commande pour copier le contenu d'un fichier à la fin d'un autre ?
    thnks!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat Fichier1 Fichier2 > Fichier3

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fransoo Voir le message
    Citation Envoyé par seanbean Voir le message
    Quelle commande pour copier le contenu d'un fichier à la fin d'un autre ?
    thnks!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat Fichier1 Fichier2 > Fichier3
    Attention...quelle commande pour copier le contenu d'un fichier à la fin d'un autre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat Fichier1 Fichier2 >> Fichier3
    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]

  15. #15
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Attention...quelle commande pour copier le contenu d'un fichier à la fin d'un autre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat Fichier1 Fichier2 >> Fichier3
    Cette commande copie le contenu de Fichier2 ajouté à la fin de Fichier1 pour l'enregistrer dans Fichier3 et ce sans modifier les fichiers originaux, c'était ça mon idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat Fichier1 Fichier2 > Fichier3
    Sinon ce serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat Fichier2 >> Fichier1

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

Discussions similaires

  1. Aide programme Shell Bash
    Par baba915 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 12/09/2011, 09h30
  2. intégrer un programme au shell windows
    Par koolway dans le forum Windows
    Réponses: 7
    Dernier message: 30/10/2005, 19h30
  3. PERL AIDE PROGRAMMATION
    Par kiza dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2005, 16h57
  4. Renvoie d'un programme au shell...?
    Par Invité dans le forum Linux
    Réponses: 4
    Dernier message: 13/05/2005, 15h18
  5. Livre sur la programmation linux (shell et noyau)
    Par Tchetch dans le forum Linux
    Réponses: 10
    Dernier message: 07/07/2004, 08h27

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