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 :

Un tout petit script génant


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut Un tout petit script génant
    Bonjour tout le monde .
    J'essaye d'ecrire un script permettant d'afficher les arguments saisis mais dans l'orde inverse jusqu'à l'ordre K (K saisi par l'utilisateur) et de garder le reste tel qu'il est. Juste pour l'opération d' inverser j'ai essayé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in $*
    do
    echo ${ $# - $i }
    done
    Mais on me parle d'erreur de substitution! et Que faire de K ??
    Merci pour votre aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 582
    Points : 19 455
    Points
    19 455
    Par défaut
    sans l'énoncé complet, c'est pas évident de savoir comment est fourni K...

    admettons que K soit donné par le premier paramètre positionnel (c'est plus facile)

    on affecte le premier paramètre positionnel à K
    on renomme les paramètres positionnels
    on utilise une C-style_for_loop qui décrémente une variable à laquelle on affecte $K, et qui doit demeurer supérieure à zéro
    enfin on affiche l'indirection de la variable qui se décrémente à chaque boucle

    Voilà, y a plus qu'à coder...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    oui en effet le K doit etre entrer par l'utilisateur
    J'ai pas compri ce que vous voulez dire par l'indirection de la variable.
    et pourquoi ce que j'ai ecrit ne marche pas ? pourtant ça a l'air loqique..
    Merci de votre reponse

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 582
    Points : 19 455
    Points
    19 455
    Par défaut
    une indirection, c'est quand la valeur d'une variable (a=b) est le nom d'une autre variable (b=c), et qu'on remplace par la valeur de cette autre variable (c)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a=b
    b=c
    echo "${!a}"
    c
    comme tu le vois c'est introduit par un point d'exclamation.

    Citation Envoyé par neutrall
    en effet le K doit etre entrer par l'utilisateur
    mais comment ?
    Citation Envoyé par neutrall
    pourquoi ce que j'ai ecrit ne marche pas ? pourtant ça a l'air loqique
    peux-tu commenter ce que tu a écrit ? ce que tu en attends...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    moi j 'ai cru ke pour afficher inversement il suffit d'ecrire
    echo $ ($# - $i) à linterieur de la boucle
    c est pas vrai ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 582
    Points : 19 455
    Points
    19 455
    Par défaut
    non.

    Tu peux nous donner un exemple d'entrée et de sortie attendue ?

  7. #7
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Tu peux faire comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    list=""
     
    while [ $# -gt 0 ]
    do
    	list=$1" "$list
    	shift
    done
    echo $list
    Si l'espace qui vient s'incruster en dernier te gênes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
     
    if [ $# -gt 0 ]
    then
    	list=$1
    	shift
    fi
     
    while [ $# -gt 0 ]
    do
    	list=$1" "$list
    	shift
    done
    echo $list

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    en fait mon script doit inverser l'affichage des element entré en argument .

    exemple : ./script 1 2 3 4 5

    apres execution :
    5 4 3 2 1

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Pour ton Script SSmario, il m 'affiche une erreur (fin de fichier prematuré)

  10. #10
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    peux-tu joindre le fichier en question ainsi que le message d'erreur exact.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    j'ai executé ton script tel qu'il est , à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if [ $# -gt 0 ] 
    then
    	list=$1
    	shift
    fi
    while [ $# -gt 0 ]
    do
    	list=$1" "$list
    	shift
    done
    echo $list # ligne 12
    on me renvoit un message d erreur : Erreur ligne 13 fin de fichier prematurée

  12. #12
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Salut.

    Citation Envoyé par neutrall Voir le message
    en fait mon script doit inverser l'affichage des element entré en argument .

    exemple : ./script 1 2 3 4 5

    apres execution :
    5 4 3 2 1
    Tu peut enregistrer tes paramètres dans un tableau monodimensionnel et inverser les valeurs à l'aide d'un second tableau, exemple :

    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
     #!/bin/bash
     
    i=0
    for f in $*
    do
        tab[i]=$f
        let i=$i+1
    done
     
    for (( i=0 ; i<$# ; i++ ))
    do
        let j=$#-$i-1
        tab2[j]=${tab[i]}
    done
     
    for (( i=0 ; i<$# ; i++ ))
    do
        printf "${tab2[i]} "
    done
    echo ""
    Voici le résultat obtenu à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ok@precario-c700:~$ ./script.sh 1 2 3 4 5
    5 4 3 2 1
    ok@precario-c700:~$ ./script.sh toto titi tata
    tata titi toto
    ok@precario-c700:~$ ./script.sh avant après
    après avant
    Cordialement,
    Idriss

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    c'est trés proche ou plutot du langage C .Mois je veux le faire exclusivement en bash shell avec ses propre commandes .
    Merci de ta réponse

  14. #14
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Citation Envoyé par neutrall Voir le message
    c'est trés proche ou plutot du langage C .Mois je veux le faire exclusivement en bash shell avec ses propre commandes .
    Merci de ta réponse
    Et pourtant, c'est du Bash à 100% ... il n'y a pas qu'en C qu'on peut faire ce genre d'algorithme.

    Sinon le script de ssmario2 s'exécute bien chez moi ... essayes peut être ceci :

    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 [ $# -gt 0 ] 
    then
        list=$1
        shift
    fi
    while [ $# -gt 0 ]
    do
        list=$(echo "$1" "$list")
        shift
    done
    echo $list

Discussions similaires

  1. Script tout petit pour formulaire. largué
    Par Xaveur dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 14/10/2014, 12h05
  2. Explication sur tout petit script
    Par Fluxy dans le forum Langage
    Réponses: 8
    Dernier message: 23/07/2007, 08h29
  3. Toute petite anomalie ou pb de conf
    Par mchicoix dans le forum XMLRAD
    Réponses: 5
    Dernier message: 03/11/2005, 23h21
  4. [TP]TP s'affiche en tout petit sous w2000
    Par spiroucarolo dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 21/10/2002, 16h36

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