Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/04/2026, à 20:47

JM3863

Guillemets et Calcul

Bonsoir
j'ai une question concernant les guillemets ou non
si je rentre le chiffre 1
Tous les tests suivants fonctionnent
Avec d'autres langages, on différenciait un champ numérique d'un champ alphanumérique
pour le numérique (If $A = 1 , pour l'alphanumérique  , if  $A ="1')
Quand dans un script on écrit A=1, le champ A ($A) est il numérique ou alpha ?
dans les tests les caractères lt,gt ne sont valables que pour des données numériques?
Pouvez vous m'éclairer ?

read -p "entrez Chiffre : " Chiffre

if [ $Chiffre = "1"  ] 
then
 echo "Nombre= double guillements_un $Chiffre"
else
  echo  "Nombre_pas_double guillements_un $Chiffre"
fi
if [ $Chiffre = '1'  ] 
then
 echo "Nombre= simple_guillement_un $Chiffre"
else
  echo  "Nombre_pas_simple_guillement_un $Chiffre"
fi
if [ $Chiffre = 1  ] 
then
 echo "Nombre= sans_guillements_un $Chiffre"
else
  echo  "Nombre_pas_sans_guillements_un $Chiffre"
fi

Questions calcul
result=$(echo "$number1 * $number2"| bc)
result=$(echo "scale=3;$number1 / $number2"| bc)
result=$(echo "scale=3;$number1 ^ $number2"| bc)

comment exprimer le nombre de décimales ?
sum2=$((sum2 /23))
comment calculer la racine carrée, cubique avec bc ou avec la formule  sum2=$((sum2 /23)) ?
Merci
JM

Hors ligne

#2 Le 19/04/2026, à 21:09

diesel

Re : Guillemets et Calcul

Ben...,

Si tu écris :

a=1
b="1"
if [ $a == $b ]
then echo "égal"
else echo "différent"
fi

Tu obtiendras "égal".

Cela signifie que la chaîne de caractères entrée 1 et la chaîne de caractères entrée "1" sont équivalentes.

bash est un langage essentiellement tourné vers le traitement des chaînes de caractères. Ainsi, le contenu d'un paramètre est une chaîne de caractères.

Cela étant, si les caractères sont des chiffres, bash est capable d'interpréter ces chiffres comme des nombres pour réaliser des calculs basiques (voir le man bash dans la section ARITHMETC EVALUATION).

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#3 Le 19/04/2026, à 21:18

Watael

Re : Guillemets et Calcul

salut

if [ $Chiffre = "1"  ] 

ceci n'est pas une comparaison arithmétique, ça compare uniquement le texte. Edit: [ $a == $b ] non plus. tongue

par défaut (si elles ne sont pas déclarées explicitement en tant qu'entiers (declare -i varName)), les variables sont des chaînes.
en fonction du contexte (utilisation des opérateurs arithmétiques de la commande test, ou d'une évaluation arithmétique (entre parenthèses doubles)), elles seront interprétées comme un entier.
NB: une variable chaîne dans un contexte arithmétique ne lévera pas d'erreur mais sera interprétée comme valant zéro.

bash n'accepte pas de décimales, il traite uniquement des entiers.

Dernière modification par Watael (Le 19/04/2026, à 21:21)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 19/04/2026, à 21:38

diesel

Re : Guillemets et Calcul

Je n'ai jamais écrit que [ $a == $b ] comparait des nombres. Je crois même avoir écrit : "Cela signifie que la chaîne de caractères entrée 1 et la chaîne de caractères entrée "1" sont équivalentes". tongue tongue

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 20/04/2026, à 06:37)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#5 Le 19/04/2026, à 22:21

Watael

Re : Guillemets et Calcul

Je crois [...]* avoir écrit

mouais. t'as pas l'air très sûr de toi. lol

--
* oui, oui, c'est de la mauvaise foi du meilleur tonneau. smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 19/04/2026, à 23:24

krodelabestiole

Re : Guillemets et Calcul

dans à peu près tous les langages informatiques, guillemets (simples ou doubles, qui ont parfois des effets différents) signifie : chaîne de caractères (texte).

pour des nombres on n'utilise pas de guillemets.
certains langages sont capables de faire la conversion implicitement, mais c'est presque toujours à éviter !

ceci dit en bash c'est différent : https://unix.stackexchange.com/question … er-in-bash
les variables ne sont pas typées.

Dernière modification par krodelabestiole (Le 20/04/2026, à 00:00)

Hors ligne

#7 Le 20/04/2026, à 01:31

RaphaelG

Re : Guillemets et Calcul

Je n'arrive pas à utiliser gnome-calculator et je n'utilise que bc.

Sans la bibliothèque mathématique, voilà ce que bc peut faire :
Les 4 opérations basiques : + - * /
racine carrée : sqrt()
puissance entière : x^n (C'est l'exposant qui doit être entier ; la base peut être un nombre décimal)

2/23 avec 3 chiffres après la virgule :

~$ echo 'scale=3; 2/23' | bc
.086
~$

Lorsqu'on lance bc avec la bibliothèque mathématique (-l) alors on a 20 chiffres après la virgule par défaut mais on peut en demander plus ou moins avec scale :

~$ echo '2/23' | bc -l
.08695652173913043478
~$

On voit que bc n'arrondit pas au nombre supérieur mais fait une troncature.

Avec la bibliothèque mathématique, bc a, en plus les fonctions suivantes : (RTFM)
s (x)
The sine of x, x is in radians.
c (x)
The cosine of x, x is in radians.
a (x)
The arctangent of x, arctangent returns radians.
l (x)
The natural logarithm of x.
e (x)
The exponential function of raising e to the value x.
j (n,x)
The bessel function of integer order n of x.

Pour calculer la racine carré, c'est fastoche. Même sans le -l il y a la fonction sqrt().

~$ echo 'scale=4; sqrt(2)' | bc
1.4142
~$

Pour la racine cubique, il faut faire un peu de math et se débrouiller avec la fonction exponentielle.
En sachant que : pour tout (a, b) appartenant à R2, a puissance b = exponentielle de ( b * ln(a) )
Donc pour la racine cubique de 2 :

~$ echo 'e((1/3)*l(2))' | bc -l
1.25992104989487316475
~$

Vérifie mais je crois que c'est à peu près cela.

Allez, le meilleur pour la fin :

~$ time echo 'scale=5000; 4*a(1)' | bc -l
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
45432664821339360726024914127372458700660631558817488152092096282925
...... j'en passe et des meilleurs ....
73774418426312986080998886874132604720

real	0m10.874s
user	0m10.870s
sys	0m0.003s
~$ 

Hors ligne

#8 Le 20/04/2026, à 01:45

Watael

Re : Guillemets et Calcul

krodelabestiole a écrit :

ceci dit en bash c'est différent : https://unix.stackexchange.com/question … er-in-bash
les variables ne sont pas typées.

par défaut, mais elles peuvent l'être.

Dernière modification par Watael (Le 20/04/2026, à 01:49)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne