Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/12/2006, 22h05   #1
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 944
Points : 4 944
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 :
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 :
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 :
kw() { kwrite "$*" 2>/dev/null & }
Pourquoi ça ne marche pas ?
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2006, 20h48   #2
Membre éclairé
 
Avatar de Lunixinclar
 
Inscription : juillet 2006
Messages : 384
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 384
Points : 342
Points : 342
Envoyer un message via MSN à Lunixinclar
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 :
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.
Lunixinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2006, 22h02   #3
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 944
Points : 4 944
Il existe bc comme évaluateur, mais on rentre dans son shell spécial calculette.
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 20h16   #4
Membre éclairé
 
Avatar de Lunixinclar
 
Inscription : juillet 2006
Messages : 384
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 384
Points : 342
Points : 342
Envoyer un message via MSN à Lunixinclar
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.
Lunixinclar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h43.


 
 
 
 
Partenaires

Hébergement Web