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 :

le "$$i" ça marche pas


Sujet :

Linux

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 163
    Par défaut le "$$i" ça marche pas
    bonjour,

    SVP, je veux faire la somme des paramètres en utilisant le "for". voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    s=0
    for i in `seq 1 $#`;do
    s=`expr $s + $[$i]`
    done
    j'ai essayé toutes les possibilités $$i, $($i),$[$i] mais en vain

    merci bien
    bonne journée à tous

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Quel est le problème exactement?

    Quel résultat souhaites-tu obtenir? Un exemple concret?

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    merci de nous indiquer egalement quel shell tu souhiates utiliser. Ils n'ont pas tous les memes possibilites, ou la meme syntaxe.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 163
    Par défaut
    bonjour,

    j'utilise le bash.
    ce que je veux, c'est calculer la somme des parametres.
    et ce que je veux dire par $$i c'est en fait $1 pour i=1

    merci bien

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re,

    tu n'as pas besoin de faire aussi compliqué. Voici l'exemple de code modifié. Il reste juste à vérifier si la valeur passée en arguements est bien un chiffre.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [sshuser@mvts2 ~]$ cat test.sh
    #!/bin/bash
    s=0
    for i in "$@" ;do
    s=`expr $s + $i`
    done
     
    echo "Somme:" $s
     
    [sshuser@mvts2 ~]$ ./test.sh 1 2 3 2 1
    Somme: 9

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 163
    Par défaut
    oui merci, je connais cette solution.
    mais mon problème, pourquoi le $$i ça marche pas, pourquoi elle me donne pas la valeur du paramètre dont l'indice correspond à $i

    merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re,

    J'ai testé ta solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    [sshuser@mvts2 ~]$ cat test.sh
    #!/bin/bash
    som=0
     
    for i in `seq 1 $#` ;do
     
    eval s=\$$i
     
    som=`expr $som + $s`
     
    done
     
    echo "Somme:" $som
    Il faut dans un premier temps backslasher le premier $ pour afficher la variable au format $1, $2. Ensuite eval te permet de récupérer la valeur stockée dans cette variable construite précédemment.

    en gros tu te compliques la vie

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 163
    Par défaut
    re,
    merci infiniment.
    oui je sais que ça se complique comme ça mais quand même j'ai voulu savoir comme utiliser le $$variable.

    merci encore

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    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 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par thouraya24 Voir le message
    oui merci, je connais cette solution.
    mais mon problème, pourquoi le $$i ça marche pas, pourquoi elle me donne pas la valeur du paramètre dont l'indice correspond à $i

    merci
    Ca marche parfaitement => ça te sort "$$" (n° du pid) suivi de la lettre "i" (le shell est con comme la lune => il analyse ce que tu lui écris de la façon la plus bête qui soit).
    Que ce qu'il sort ne corresponde pas à ton désir est une autre histoire...

    Citation Envoyé par thouraya24 Voir le message
    j'ai essayé toutes les possibilités $$i, $($i),$[$i] mais en vain
    Pour respecter la norme, t'aurais dû écrire "${$i}" mais même ça ça ne fonctionne pas. Pour réussir ta syntaxe, tu peux passer par eval (comme l'a brillamment expliqué Mygale1978) ou alors, si t'es en bash, utiliser la syntaxe "${!i}"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    som=0
    for i in `seq 1 $#` ;do
        som=`expr $som + ${!i}`
    done
     
    echo "Somme:" $som
    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]

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