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 :

fonction : calc() { echo $[ $1 ] }


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut fonction : calc() { echo $[ $1 ] }
    Bonjour

    Je teste un peu le bash...
    J'aimerai faire une fonction de calcul qui marche de la manière suivante :J'ai fait un programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/bash
    echo $[ $* ]
    Le problème est que je dois mettre entre guillemets le paramètre si j'ai des parenthèses ! (le $* pour permettre de mettre des espaces dans l'opération).

    Pas grave, j'essaie de faire avec et de générer une fonction. Voici mes tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [troumad@localhost][~/tmp]$ calc() { echo $[ "$*" ] }
    > ;
    bash: syntax error near unexpected token `;'
    [troumad@localhost][~/tmp]$ calc() { echo $[ $* ] }
    > ;
    bash: syntax error near unexpected token `;'
    [troumad@localhost][~/tmp]$ calc() { echo \$[ \$* ] }
    > ;
    bash: syntax error near unexpected token `;'
    Pourtant, la suivante marche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kw() { kwrite "$*" 2>/dev/null & }
    Pourquoi ça ne marche pas ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    Salut,
    J'espère que quelqu'un aura une réponse.
    Comme la parenthèse est un caractère spécial (métacaractère), un moyen de la traiter consiste à la précéder d'un slash:
    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/bash
    echo $(($1))
    Fonctionne également, si l' expression est entre guillemets:
    Ca pourrait expliquer pourquoi je n' ai jamais vu d'évaluateur d' expression arithmétique écrit en shell (mais espère encore!).
    Il faudrait écrire le prog en C. Peut-être que Perl ou Python pourraient accepter l' expression.

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Il existe bc comme évaluateur, mais on rentre dans son shell spécial calculette.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    Si lire sur stdin est envisageable, alors le shell devrait pouvoir. Mais passer l' expression en argument me semble délicat. C'est un job pour lequel le C excelle. Là il y a pléthore de codes d'évaluateurs d'expressions (arbres binaires, listes chaînées). Vu comment le shell fonctionne, la parenthèse pose problème.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/04/2007, 14h35
  2. Fonction echo ne marchant pas
    Par aygouin dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2007, 21h38
  3. Problème avec la fonction echo
    Par pas30 dans le forum Langage
    Réponses: 1
    Dernier message: 26/12/2006, 04h19
  4. fonction echo et concaténation
    Par Athorus dans le forum Langage
    Réponses: 7
    Dernier message: 18/07/2006, 15h07
  5. Signification \t dans fonction echo ou print
    Par webrider dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2006, 13h44

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