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 :

Script factoriel et script affichage du dossier


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut Script factoriel et script affichage du dossier
    bonsoir
    j'ai besoin d'une aide s'ils vous plaient voila les 2 exercices
    Nom : IMG_3035.JPG
Affichages : 681
Taille : 217,6 Ko
    j'ai essayer de faire le premiere exercice mais ca ne marche pas
    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
    ls -l "$1" > /dev/null
    if [ "$?" -ne 0 ] ;then
    return 1
    echo "le dosier $1 n'existe pas"
    else
    if [-d "$1" -a -r "$1" ] ;then
    ls "$1"
    elif [*-f "$1" ] ;then
    echo "$1 n'est pas un dossier"
    elif [*-d "$1" ] ;then
    echo " vous n'avez pas le droit de lire $1"
    fi
    fi
      0  0

  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 387
    Points
    19 387
    Par défaut
    Bonjour,

    Citation Envoyé par man bash
    ! expression
    Vrai si expression est fausse.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      0  0

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,
    c'bon le premiere exercice a fonctionner si tu peux me proposer une autre reponse mieu voila ce que j'ai fais
    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
      GNU nano 2.2.6               File: exe2.sh                                    
     
    #/bin/bash
    ls  "$1" > /dev/null
    if [ "$?" -ne 0 ] ;then
    return 1
    echo "le dosier $1 n'existe pas"
    else
    if [ -d "$1" -a -r "$1" ] ;then
    ls "$1"
    elif [ -f "$1" ] ;then
    echo "$1 n'est pas un dossier"
    elif [  -d "$1" -a ! -r "$1" ] ;then
    echo " vous n'avez pas le droit de lire $1"
    fi
    fi
    et une aide pour le deuxieme exercice et merci
      0  0

  4. #4
    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 387
    Points
    19 387
    Par défaut
    je proscris l'emploi de ls dans les scripts.

    à part ça, je commencerai par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tester si l'argument passé au script existe
    alors
       tester si c'est un répertoire
       alors
          tester s'il est lisible
          alors
             afficher le contenu
          sinon
             dire qu'il n'est pas lisible
          finTester
    etc...
    il faut mettre tout ça dans une boucle for qui itérera sur les arguments passés aux script.

    pour l'exercice concernant la factorielle, tu dois nous proposer quelque chose.
    nous ne faisons pas les exercices.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      1  0

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    c'bon j'ai developper mon script tu le trouve comment maintenant mais si je donne plus q'un argument sa ne marche pas il compte pas le deuxieme argument et j'ai besoin d'une petite aide sur factorielle je sais pas d'ou commencer
    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
    #/bin/bash
    for i in "$1"
    do
            if [ "$#" -eq 0 ]
            then
                    "Manque de parametre"
                    return 1
            else
                    ls "$1" /dev/null 
                    if [ "$?" -eq 0 ]
                    then
                            if [ -d  "$1" ]
                            then
                                    if [ -r "$1" ] 
                                    then
                                            ls "$1"
                                    else
                                            echo "$1 : acces refuser"
                                    fi
                            fi
                            if [ -f "$1" ]
                            then
                                    echo "$1 n'est pas un dossier"
                            fi
     
                    else 
                            echo "ce dossier n'existe pas"
                            return 1
                    fi
            fi
    shift
    done
      0  0

  6. #6
    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 387
    Points
    19 387
    Par défaut
    tous les arguments d'un script sont dans $@, et non dans $1, qui est le premier argument passé au script.
    tu devrais tester le nombre d'arguments avant d'entrer dans la boucle.
    return ne fonctionne que dans les fonctions.
    shift est inutile dans une boucle for.
    si tu testes comme je l'ai montré précédemment le premier ls est inutile, ainsi que le test du retour.
    il y a d'autres cas de figures où un fichier n'est pas un répertoire (lien, fifo...); le simple test de savoir si l'argument est un répertoire suffit.

    pour la factorielle, explique-nous ce que c'est, comment ça se calcule, comment on peut "factoriser" le traitement...
    si je te montre comment faire, le prof verra tout de suite que ce n'est pas toi qui l'a fait. :/
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      1  0

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    merci beacoup pour ces informations bon voila ce que j'ai fais mais sa ne marche pas
    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
    #/bin/bash
    if [ "$#" -eq 0 ]
    then
            echo "Manque de parametre"
    else
    for i in "$@"
    do
            if ls "$i" 
            then
                    if [ -d  "$i" ]
                    then
                            if [ -r "$i" ] 
                            then
                                    ls "$i"
                            else
                                    echo "$i : acces refuser"
                            fi
                    fi
                            if [ ! -d "$i" ]
                            then
                                    echo "$i n'est pas un dossier"
                            fi
     
            else 
                    echo "$i n'existe pas"
            fi
    fi
    done
      0  0

  8. #8
    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 387
    Points
    19 387
    Par défaut

    cf. help test
    PS:
    lister [...] l'ensemble des dossiers du répertoire indiqué
    ls va afficher les fichiers et les répertoires immédiatement sous le répertoire en argument.
    cette requête me paraît ambiguë
    faut-il afficher uniquement les répertoires, et tous les sous-répertoires, ou aussi les fichiers...?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      1  0

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    merci beaucoup maintenant le script fonctionne bien
    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
    /bin/bash
    if [ "$#" -eq 0 ]
    then
            echo "Manque de parametre"
    else
            for i in "$@"
            do
                    if test -e "$i"
                    then
                            if [ -d  "$i" ]
                            then
                                    if [ -r "$i" ] 
                                    then
                                            ls "$i"
                                    else
                                            echo "$i : acces refuser"
                                    fi
                            fi
                                    if [ ! -d "$i" ]
                                    then
                                            echo "$i n'est pas un dossier"
                                    fi
     
                    else 
                            echo "$i n'existe pas"
                    fi
            done
    fi
    je vais essayer de faire l'autre script apres et je te le montre
    merci
      0  0

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    PS: ls va afficher les fichiers et les répertoires immédiatement sous le répertoire en argument.
    cette requête me paraît ambiguë
    faut-il afficher uniquement les répertoires, et tous les sous-répertoires, ou aussi les fichiers...?
    je sais pas moi aussi j'ai pas bien compris la question tu me propose quoi au lieu de ls ?
      0  0

  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 387
    Points
    19 387
    Par défaut
    ça dépend de ce que tu décides de faire.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      0  0

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ça dépend de ce que tu décides de faire.
    bon je vais le laisser comme sa pas grave
    maintenant je vais passer au 2eme exercice
      0  0

  13. #13
    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 387
    Points
    19 387
    Par défaut
    attention, ton shebang est mal formé, ça doit être #!/bin/bash : dièse exclamation chemin
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      0  0

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    attention, ton shebang est mal formé, ça doit être #!/bin/bash : dièse exclamation chemin
    c'bon j'ai corriger le
    maitenant factoriel sa ne marche pas voila ce que j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
    if [ "$1" -ge 0 ]
    then
            let i="$1"-1
            while [ "$i" -ge 1 ]
            do
            let "$1"="$1"*"$i"
            done
    else
    return -1
    echo "-1"
    fi
      0  0

  15. #15
    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 387
    Points
    19 387
    Par défaut
    return ne fonctionne que dans une fonction.
    et un code de retour ne peut pas être négatif, il ne peut être compris qu'entre 0 et 255.

    il faut incrémenter négativement $i à l'intérieur de la boucle.

    ce serait utile de commenter tes scripts, afin qu'on puisse suivre ton raisonnement.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      1  0

  16. #16
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    return ne fonctionne que dans une fonction.
    et un code de retour ne peut pas être négatif, il ne peut être compris qu'entre 0 et 255.

    il faut incrémenter négativement $i à l'intérieur de la boucle.

    ce serait utile de commenter tes scripts, afin qu'on puisse suivre ton raisonnement.
    d'accord bon voila ce que j'ai pu faire mais sa ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash
    if [ "$1" -ge 1 ]       #si l'argument et superieur ou egale a 1
    then
            i="$1"
            while [ "$i" -ge 1 ] #tant que i est superieur ou egale a 1 
            do
            let i="$1"-1 #exemple l'argument est 4 il va devenir 3 pour faire la multiplication sur 3 et 2 et 1
            let result="$i"*"$1"
            echo "$result"   
            done
    else
    echo "-1"
    fi
      1  0

  17. #17
    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 387
    Points
    19 387
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          let result="${result:-1}*$i"
          let i=${i}-1 #exemple l'argument est 4 il va devenir 3 pour faire la multiplication sur 3 et 2 et 1
       done
       echo "$result"
    pour définir le code de retour d'un script, on utilise exit n (0 <= n <= 255).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      1  0

  18. #18
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          let result="${result:-1}*$i"
          let i=${i}-1 #exemple l'argument est 4 il va devenir 3 pour faire la multiplication sur 3 et 2 et 1
       done
       echo "$result"
    pour définir le code de retour d'un script, on utilise exit n (0 <= n <= 255).
    (y) (y) c'bon le script fontionne bien merci mais j'ai pas comrpis sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let result="${result:-1}*$i"
      0  0

  19. #19
    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 387
    Points
    19 387
    Par défaut
    cf. man bash : Utilisation de valeur par défaut.

    il faut lire la doc !

    tu peux passer le sujet en
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      0  0

  20. #20
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 174
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    cf. man bash : Utilisation de valeur par défaut.

    il faut lire la doc !

    tu peux passer le sujet en
    d'accord (y)
      0  0

Discussion fermée
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Emplacement scripts et vitesse d'affichage page web
    Par Anibel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/07/2013, 10h06
  2. Réponses: 4
    Dernier message: 27/03/2012, 08h00
  3. Script modification des droits sur un dossier
    Par Hurycanrana dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 03/03/2010, 10h35
  4. [AJAX] script simple AJAX PHP affichage balise div et requête mysql
    Par Invité dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 08/02/2009, 14h21
  5. [Galerie] Script permettant d'importer tout un dossier d'images en une seule fois
    Par luluptitbeur dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 24/05/2008, 11h00

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