CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Je ne comprend pas [ shell ]

dudu45
dudu45
Niveau 6
08 novembre 2013 à 19:55:16

Bonsoir,

Je souhaite concrétiser mon projet, or j'ai une erreur qui me casse la tête depuis ce matin et je ne comprend pas.
L'erreur est :
(standard_in) 1: syntax error
(standard_in) 1: syntax error
./test.sh: ligne 43 : [: = : opérateur unaire attendu

if [ $(bc -l <<<"$ncd < $ncdmin") = 1 ]

La ligne 43 est celle là... Si quelqu'un pourrez m'aider, ca serait plus que sympathique ! :D

Merci d'avance

Knakis
Knakis
Niveau 10
08 novembre 2013 à 20:59:42

Je sais pas trop ce que tu veux faire, mais le signe d'égalité est un symbole d'afféctation en shell.

Ce qui est juste:

if [ $(bc -l <<<"$ncd < $ncdmin") == 1 ]

== est le symbole de comparaison. :(

DN4
DN4
Niveau 7
09 novembre 2013 à 00:28:51

Je devine que le problème vient du fait que les variables ncd et ncdmin sont des nombres à virgule flottante representée par une virgule ( , ), tandis que bc(1) ne reconnait que la notation internationale, i.e. le point ( . ).

Tu ne peux pas y remédier directement via bc(1) car POSIX stipule que, pour des raisons de parsing, seul le point doit être utilisé pour cette représentation, quelque soit le locale utilisé. (e.g. ambiguïté nombres décimaux / arguments de fonction)

Donc, si ncd et ncdmin ont des valeurs en dur, remplace juste la virgule par un point. Sinon, si elles proviennent d'une sortie quelconque, tu dois utiliser tr(1) par exemple, pour automatiser ladite manipulation.

Ou si t'utilises bash(1) (ce que j'ai appris dans ton autre topic), tu peux faire la substitution pour chaque, en modifiant les expansions par ${ncd/,/.} et ${ncdmin/,/.}, respectivement.

Aussi, l'utilisation du flag -l de bc(1) est inutile ici.
La simple comparaison de nombres décimaux ne nécessite pas de bibliothèque.

Knakis Voir le profil de Knakis
Posté le 8 novembre 2013 à 20:59:42 Avertir un administrateur
Je sais pas trop ce que tu veux faire, mais le signe d'égalité est un symbole d'afféctation en shell.

Ce qui est juste:

if [ $(bc -l <<<"$ncd < $ncdmin") == 1 ]

== est le symbole de comparaison. :(

:d) Non, == n'est pas un opérateur valide de test(1). S'il fonctionne dans ton shell, c'est que ce dernier utilise un builtin reproduisant le comportement de test(1) tout en acceptant l'opérateur ==. Il n'est pas défini par POSIX ; seul = sert à tester l'égalité de *chaînes de caractères*.

convection
convection
Niveau 10
09 novembre 2013 à 14:59:32

Les chaine de caractère c'est =="1" et pour les nombres c'est ==1...

DN4
DN4
Niveau 7
10 novembre 2013 à 02:19:50

Toi, t'as pas lu mon post.

En admettant que ton shell utilise une implémentation de test(1) supportant l'opérateur ==, tes deux syntaxes sont strictement identiques et produisent le même résultat, c'est-à-dire une erreur de syntaxe, car un opérateur est attendu et que le seul argument que tu passes au théorique test(0) est la chaîne de caractère =="1" ou ==1.

Tester l'égalité de :
- chaînes de caractères :d) =
- chiffres / nombres :d) -eq

De plus, des espaces de part et d'autre de chaque opérateur sont requis, car chaque chaîne passée à test(0) est un argument qui doit être évalué selon un ordre précis.

AnusCroulant
AnusCroulant
Niveau 6
10 novembre 2013 à 05:54:59

DN4, le genre de type qu'on adore avoir sur les forums ! :-p

Bravo à toi mec, t'es un bon, ça c'est d'la réponse ! :ok:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment