Je te propose une autre forme pour faire la même chose avec moins de questions :
#! /bin/bash
read -p "Quelle opération voulez-vous effectuer : [A]ddition [S]oustraction [M]ultiplication [D]ivision ?" operation
case $operation in
[Aa]|[Aa]ddition|'+')
read -rp 'Donnez les deux nombres à additionner : ' var1 var2
echo "Résultat : $(echo $var1 + $var2| bc -l)"
;;
[Ss]|[Ss]oustraction|'-')
read -rp 'Donnez les deux nombres à soustraire : ' var1 var2
echo "Résultat : $(echo $var1 - $var2| bc -l)"
;;
[Mm]|[Mm]ultiplication|'*')
read -rp 'Donnez les deux nombres à multiplier : ' var1 var2
echo "Résultat : $(echo $var1 \* $var2| bc -l)"
;;
[Dd]|[Dd]ivision|'/')
read -rp 'Donnez les deux nombres à diviser : ' var1 var2
echo "Résultat : $(echo $var1 / $var2| bc -l)"
;;
*) echo "Opération : \"$operation\" non reconnue."
;;
esac
Déjà un grand merci à toi pour tes conseils:
Peux tu m'expliquer ton programme.
1) en face de la commande "read -p" tu places des crochet ( autour du de la majuscule de chaque argument ) . Il semblent permettre à l'utilisateur de les sélectionner , ok .. Le terme "opération en bout de phrase est il nécessaire ?
2) Ensuite je ne connais pas encore la fonction "case" et "in" . J'imagine que le "in" signifie que l'entrée de l'opérateur est ensuite chargée dans la variable..?
3) Là je ne pige pas cette formule : [Aa]|[Aa]ddition|'+') . Peux tu m'éclairer ?
4) A quelle occasion utilise t on les doubles guillemets ";;"
Re merci]]>
Ce n'est pas moi qui ai choisi ce nom : c'est bash qui a choisi de nommer REPLY cette variable.
Raison de plus pour choisir nos propres noms de variables de telles façons qu'elles soient bien nommées !
EDIT: Bref, je suis contre l'économie de nom de variables… que ce soit dans REPLY ou dans un autre nom
ça prendra la même place et je préfère être explicite dans le choix des noms de variables.]]>
On peut même se passer de la variable operation
Franchement, je préfère utiliser une variable qui a un nom qui correspond à son utilité
plutôt qu'un nom générique comme REPLY…]]>
=======
Il y a aussi la possibilité d'utiliser une variable de type tableau pour la saisie des valeurs entrées:
Ce qui permet de faire :
]]>
]]>
]]>
Je voulais justement apporter mes corrections mais tu m'as devancé, même largement devancé car mon script ne fonctionne plus :
Si tu prenais l'habitude de mettre en forme correctement tes scripts, ça serait plus facile de s'y retrouver. Là pour comprendre
ce que tu as fait je suis obligé de le faire moi-même, ça ne donne pas envie d'y regarder…]]>
4.3 6.2
Le script parle de deux chiffres, pas de quatre, peut-être ? ]]>
Peux tu m'éclairer je ne pige ce qui déconne
Un grand merci d'avance !]]>
Et donc pour récupérer cette valeur dans le script on fait :
EDIT: Mais franchement, c'est plus pratique d'utiliser bc directement.
EDIT2: En fait pour faire des calculs, je préfère python en interactif (ou ruby),
bon bon, d'accord, c'est hors sujet… ]]>
Tu remarqueras que j'ai indenté les blocs des if, ça rend les choses plus claires.
Un then ne peut suivre qu'un if ou un elif (qui remplace avantageusement un else if… fi),
chaque if doit se terminer par fi .]]>
Apriori tu ne vois pas que pour exprimer la comparaison "est comme" on fait "==" et pas "=" en bash.
À vrai dire, on peut faire les deux…]]>
Des éclairages ?]]>