Résolu le 29-11-18 [RESOLU]script de multiplication sans résultat

Questions concernant les lignes de commandes
calixtus06
Messages : 172
Enregistré le : ven. 11 nov. 2016 19:34
Localisation : Vinay (38)

Re: script de multiplication sans résultat

Message par calixtus06 »

Dernier message de la page précédente :

Par rapport à ton erreur:
On assigne une variable sans mettre de $
a='blabla'
Et on l'évalue avec le symbole $
echo $a
Dans ton echo tu as basiquement echo "le résultat de la multiplication est $((*))", ce qui retourne une erreur.
Si je comprends bien il aurait fallu écrire:

Code : Tout sélectionner

#!/bin/bash
#comme sujet d'un premier script je veux créer une commande "multiplication"
#l'utilisateur entre deux nombre même décimaux  après le mot "multiplier:" et cela applique la multiplication de ces deux nombres
echo -n "multiplier:"
var=f1
var=f2
read f1 f2
echo "le résultat de la multiplication = $(($f1*$f2))"
exit 0
J'ai réussi !!!
ACER ASPIRE M3641,
KDE Plasma 5.6.5, Distro: Linux Mint 18 Sarah, Intel model: DG41CN, Quad core Intel Core2 Quad Q6600, speed/max: 1596/2394 MHz, NVIDIA G73 [GeForce 7600 GT],
Network Card: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller driver: r8169
Drives: HDD Total Size: 160.0GB (34.1% used)
Memory: 3 go DDR2 Synchrone 667 MHz (1,5 ns)
Kernel: 4.4.0-21-generic x86_64 (64 bit),

calixtus06
Messages : 172
Enregistré le : ven. 11 nov. 2016 19:34
Localisation : Vinay (38)

Re: script de multiplication sans résultat

Message par calixtus06 »

y a plus qu'à filtrer la fonction par bc et transformer le script en commande en le glissant dans le PATH ??

Code : Tout sélectionner

#!/bin/bash
#comme sujet d'un premier script je veux créer une commande "multiplication"
#l'utilisateur entre deux nombre même décimaux  après le mot "multiplier:" et cela applique la multiplication de ces deux nombres
echo -n "multiplier:"
var=f1
var=f2
read f1 f2
echo "le résultat de la multiplication = $(($f1*$f2))"
#je vérifie que bc est installé
if [ ! -z $(which bc) ]
then
echo "$f1 * $f2" | bc 
fi

Code : Tout sélectionner

nicolasmintkde-desktop nicolasmintkde # ./Multiplication3.sh
multiplier:3.5 5
./Multiplication3.sh: ligne 8: 3.5*5 : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".5*5")
17.5
nicolasmintkde-desktop nicolasmintkde # 
 
j'ai un résultat mais avec une ligne d'erreur ( ??)

Là j'ai pas d'idée encore, merci à vous deux
ACER ASPIRE M3641,
KDE Plasma 5.6.5, Distro: Linux Mint 18 Sarah, Intel model: DG41CN, Quad core Intel Core2 Quad Q6600, speed/max: 1596/2394 MHz, NVIDIA G73 [GeForce 7600 GT],
Network Card: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller driver: r8169
Drives: HDD Total Size: 160.0GB (34.1% used)
Memory: 3 go DDR2 Synchrone 667 MHz (1,5 ns)
Kernel: 4.4.0-21-generic x86_64 (64 bit),

Avatar du membre
WarLocG
Messages : 96
Enregistré le : mer. 20 avr. 2016 18:39
Localisation : Belgique

Re: script de multiplication sans résultat

Message par WarLocG »

La forme bash

Code : Tout sélectionner

echo "le résultat de la multiplication = $(($f1*$f2))"
ne gère pas les virgules

Correction:

Code : Tout sélectionner

#!/bin/bash
#comme sujet d'un premier script je veux créer une commande "multiplication"
#l'utilisateur entre deux nombre même décimaux  après le mot "multiplier:" et cela applique la multiplication de ces deux nombres
echo -n "multiplier:"
var=f1
var=f2
read f1 f2
echo -n "le résultat de la multiplication = " #echo sans passage à la ligne
#je vérifie que bc est installé
if [ ! -z $(which bc) ]
then
  echo "$f1 * $f2" | bc
else
  echo $(($f1 * $f2))
fi
Si bc n'est pas installé, bash sera utilisé.

Avatar du membre
WarLocG
Messages : 96
Enregistré le : mer. 20 avr. 2016 18:39
Localisation : Belgique

Re: script de multiplication sans résultat

Message par WarLocG »

calixtus06 a écrit :J'ai essayé de faire un mini programme avec les syntaxes que tu m'as indiquées:

Code : Tout sélectionner

#! /bin/bash
read -p "facteur1:"f1
read -p "facteur2:"f2
echo $f1*$f2 | bc
ensuite je l'exécute en ligne de commande:

Code : Tout sélectionner

nicolasmintkde-desktop nicolasmintkde # ./Multiplicationread.sh 
facteur1:f1 2 <- ici tu vois que f1 n'est pas la variable mais fait partie du message
facteur2:f2 3 <- idem pour f2
...
Qu'est ce qui se passe ?
J'avais pas vu cette partie, je t'y répond maintenant

Code : Tout sélectionner

#! /bin/bash
read -p "facteur1:"f1  <- ne colle pas tes variable et le message
read -p "facteur2:"f2  <- idem
echo $f1*$f2 | bc       <- tu as oublié les "", le truc c'est d'envoyer une opération mathématique a bc pour qu'il l'évalue. bc est une calculatrice en ligne de commande, lui envoyer une opération (un calcul) fait qu'il renvoit le résultat si y a pas d'erreur dans l'opération.

calixtus06
Messages : 172
Enregistré le : ven. 11 nov. 2016 19:34
Localisation : Vinay (38)

Re: script de multiplication sans résultat

Message par calixtus06 »

Encore merci pour ta patience, j'ai corrigé mon script et j'y vois un peu plus clair.

peut on revenir sur ces deux syntaxes:
read -p "facteur1:"f1 <- ne colle pas tes variable et le message
read -p "facteur2:"f2 <- idem
Questions de débutant un peu perdu: que signifie read -p et ensuite la syntaxe qui suit: "facteur1:"f1 qu'il fallait écrire: "facteur1:" f1
ACER ASPIRE M3641,
KDE Plasma 5.6.5, Distro: Linux Mint 18 Sarah, Intel model: DG41CN, Quad core Intel Core2 Quad Q6600, speed/max: 1596/2394 MHz, NVIDIA G73 [GeForce 7600 GT],
Network Card: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller driver: r8169
Drives: HDD Total Size: 160.0GB (34.1% used)
Memory: 3 go DDR2 Synchrone 667 MHz (1,5 ns)
Kernel: 4.4.0-21-generic x86_64 (64 bit),

Avatar du membre
WarLocG
Messages : 96
Enregistré le : mer. 20 avr. 2016 18:39
Localisation : Belgique

Re: script de multiplication sans résultat

Message par WarLocG »

le -p de read c'est pour lui donner un petit message d'invite pour l'utilisateur
teste ca:
read a
read -p "Inserer message ici: " b
echo "$a $b"
Tu verras qu'avec le read -p tu auras une invite en plus :)
et ensuite la syntaxe qui suit: "facteur1:"f1 qu'il fallait écrire: "facteur1:" f1
Bah si tu colles la variable au message, il fera partie du message (du -p ), et tu n'auras aucune variable a assigner non plus du coup. Donc les séparer par un espace.

calixtus06
Messages : 172
Enregistré le : ven. 11 nov. 2016 19:34
Localisation : Vinay (38)

Re: script de multiplication sans résultat

Message par calixtus06 »

les deux points " : " remplacent "=" ?
ACER ASPIRE M3641,
KDE Plasma 5.6.5, Distro: Linux Mint 18 Sarah, Intel model: DG41CN, Quad core Intel Core2 Quad Q6600, speed/max: 1596/2394 MHz, NVIDIA G73 [GeForce 7600 GT],
Network Card: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller driver: r8169
Drives: HDD Total Size: 160.0GB (34.1% used)
Memory: 3 go DDR2 Synchrone 667 MHz (1,5 ns)
Kernel: 4.4.0-21-generic x86_64 (64 bit),

Avatar du membre
WarLocG
Messages : 96
Enregistré le : mer. 20 avr. 2016 18:39
Localisation : Belgique

Re: script de multiplication sans résultat

Message par WarLocG »

Oui ca fait partie de la chaîne de caractère, enfin du message. Entre les guillemets tu mets ce que tu veux.

Avatar du membre
alain
Administrateur du site
Messages : 14704
Enregistré le : dim. 11 oct. 2015 23:41
Localisation : Chelles
Contact :

Re: script de multiplication sans résultat

Message par alain »

Bonjour vous deux ;)
WarLocG a écrit : Et pour les filtres, alain t'a donné l'explication mais un exemple est plus parlant:
J'en aurai été bien incapable :D
WarLocG a écrit : Les filtres et les tests c'est des vérifications dans lesquels tu anticipes des erreurs que pourraient faire un utilisateur avec ton script. C'est avec la logique, la base de la programmation :)
Je suis tout à fait d'accord, j'ai «boufé» 2 ans de logique (à l'école) sans faire une ligne de programmation, juste des applications sur portes pneumatiques, électriques et électroniques.
c'est sur que j'en ai manié du 1 et du 0 ;)
les filtres, test, conditions, boucles... etc ça m'est venu plus tard avec la pratique du basic, puis du turbo pascal.
Je suis vos intéressants échanges, mais je m’aperçois qu'avec l'age j'ai beaucoup plus de mal a retenir la syntaxe propre au shell. Je comprends, mais 2 mn après j'ai
oublié la syntaxe du coup obligé de revenir sur le sujet :? Ha! il y a 30 ans je lisais une fois "for i=1 to x ; if A$= y ; then goto z" c'était gravé dans le marbre :lol:
J'ai dit 30 ans? ben en fait tout comptes fait c'est plutôt 35.... :oops:
PC are like air conditioning, they becomes useless when you open Windows (L.T)
PC1 : CM : ASRock 990FX | CPU: AMD FX 8350-8 cores, 4 GHz | RAM: 16 Go DDR3 1600 MHz | CG: ATI RX 580-8 Go | OS : LM 20.3 Uma Xfce 4.16 | K: 5.4
PC2
:Core2 Quad Q9650 @ 3 GHz | CG: Nvidia GTX 650TI | OS: LM 21.3 Xfce 4.18| K: 6.5
PC3 :Core i7-2600 @ 3,5 GHz | CG: ATI HD 4650 | OS: Emmade5 Xfce 4.18.0 | K: 6.1
PC4 : AMD Ryzen 5 3500X 4GHz | CG: GTX 970 | Ram : 8GB |OS : Debian 10.5 | K: 5.10
In a world without walls and fences, who needs windows and gates?

Avatar du membre
WarLocG
Messages : 96
Enregistré le : mer. 20 avr. 2016 18:39
Localisation : Belgique

Re: script de multiplication sans résultat

Message par WarLocG »

Ne t'inquiète pas que j'oublie aussi ;) Après être passé par BASICA sur Commodore64, QBasic, pascal, les batch (+config.sys et autoexec.bat), le dotNet (vb.net / C#), langages web + SQL, bash, C, java, PHP, python.. Je mélange et je ne retiens pas tout. Heureusement, on a internet pour se ressourcer :D

calixtus06
Messages : 172
Enregistré le : ven. 11 nov. 2016 19:34
Localisation : Vinay (38)

Re: script de multiplication sans résultat

Message par calixtus06 »

hello pour finir une question qui me turlupine: . Peut on me détailler cette "formule" , sa signification:

Code : Tout sélectionner

if [ ! -z $(which bc) ]
si la chaîne < c'est qui c'est quoi ? paramètre, variable ?) )
n'est pas vide, le contenu de la variable (which bc) <je ne comprend pas

merci d'avance
ACER ASPIRE M3641,
KDE Plasma 5.6.5, Distro: Linux Mint 18 Sarah, Intel model: DG41CN, Quad core Intel Core2 Quad Q6600, speed/max: 1596/2394 MHz, NVIDIA G73 [GeForce 7600 GT],
Network Card: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller driver: r8169
Drives: HDD Total Size: 160.0GB (34.1% used)
Memory: 3 go DDR2 Synchrone 667 MHz (1,5 ns)
Kernel: 4.4.0-21-generic x86_64 (64 bit),

Répondre