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 :

script: Fact !


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Par défaut script: Fact !
    Bonjour!

    Juste une petite question, peut être vous la trouverez bête mais je suis encore débutante dans tout ce qui concerne "Unix"

    je n'ai pas compris cette écriture {n:-1}
    je vous donne un exemple d'utilisation " Script shell qui calcule la factorielle d'un nombre entré en argument "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/sh
    
    n=$1
    while [ $n -gt 1 ]
    do
    f=$(( $n*${f:-1} ))
    n=$(( $n - 1 ))
    done
    
    echo "$n"

    Une autre question, le code en haut c'est un simple script, j'ai essayé d'écrire un script qui fait le même travail (calcule de la factorielle) mais en utilisant un script récursive .. j'ai bien essayé mais ça ne marche pas!!

    Pouvez-vous m'aider ?? svp

    là je suis entrain de préparer l'examen final, et j'ai un nombre d'exercices/problèmes et j'essaye de les résoudre .. je ne pose pas la question et je ne demande pas de l'aide si j'ai jamais essayé moi seul

    Merci d'avance & bien cordialement

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Par défaut
    http://www.developpez.net/forums/d71...ouver-lerreur/


    içi j'ai trouvé " factorielle récursive " .. mais je n'i rien compris car on n'utilise pas encore TEST ...

  3. #3
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Retourne la valeur de f si f est non vide ou non-initialisé
    écriture équivalente de x=${f:-1} :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ -z "$f" ]
    then  x=1
    else  x=$f
    fi
    Montre nous ton script qui ne marche pas, et dis nous ce qui ne marche pas.
    Si tu lance ton script avec sh -x chemin_et_nom_du_script il t'affiche toutes les opérations effectuées, c'est pratique pour déboguer.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Par défaut
    Bonsoir,

    Merci très bien pour l'explication et je pense que la deuxième écriture est plus compréhensible que l'autre ..

    Concernant ma deuxième question, Script récursif :

    j'ai essayé un qui ne marche pas, çi-joint sa capture d'écran (avec des commentaires)

    Merci encore une fois
    Images attachées Images attachées  

  5. #5
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Un qui marche (avec bash) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    (($1>20)) && echo "Ne peut traiter des nombres supérieurs à 20"
    if (($1>1))
    then
    	echo "$(( $1 * $(./fact $(($1-1)) ) ))"
    else
    	echo "$1"
    fi
    les script doit être enregistré sous le nom fact et appelé depuis le répertoire où il se trouve :

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    Je ne sais pas, j'utiliserais une fonction plutôt que de rappeler le script :
    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
     
    function factFunc
    {
       local a=$1
       if (( $a > 1 )); then
          echo "$(( $a * $(factFunc $(($a-1)) ) ))"
       else
          echo "$a"
       fi
    }
     
    if (( $1 > 20 )); then
       echo "Ne peut traiter des nombres supérieurs à 20"
       exit 1
    else
       factFunc $1
    fi
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 08h45
  2. Script et XMLmodule
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/01/2003, 17h10
  3. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 23h42
  4. Réponses: 2
    Dernier message: 11/07/2002, 09h31

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