2017-04-10 2 views
0

J'essaie d'obtenir une instruction if pour fonctionner avec bc afin de déterminer si un nombre dans un fichier texte est dans une plage numérique ou en dehors de celui-ci. J'ai des conditions (echoes) que je voudrais déclencher lorsque les critères sont (ou ne sont pas) remplis.Instruction IF pour la plage de numéros (standard_in) 1: erreur de syntaxe

fichier climo.diff:

17.3 

Bash code:

check=`cat climo.diff` 

if (($(bc <<< "${check} < -7.0" || "${check} > 7.0"))); 
then 
echo "CAUTION: Outside acceptable range." 
else 
echo "Within acceptable range." 
fi 

Je continue à obtenir l'erreur suivante :

(standard_in) 1: syntax error 
+0

En effet, la syntaxe est erronée. Vous utilisez l'opérateur '||' dans une exécution avec '$()'. Fondamentalement, vous essayez d'appeler le programme '" $ {check}> 7.0 "' ce qui n'a aucun sens. Je ne suis pas un expert de 'bc', mais je ferais quelque chose comme' if bc <<< "$ {check} <-7.0" || bc << < "${check} > 7.0 "; then." Peut-être que cela peut être fait dans un appel 'bc' au lieu de deux – vdavid

Répondre

3

Le || doit entrer dans les guillemets afin qu'il soit considéré comme faisant partie de l'entrée bc, plutôt qu'un opérateur de shell séparant la commande bc d'un nom de commande non valide.

if (($(bc <<< "${check} < -7.0 || ${check} > 7.0"))); 

puis

+0

Je continue d'obtenir la même erreur, mais, mettre le' || 'dans le côté des guillemets semble avoir L'instruction if a été corrigée et elle semble fonctionner maintenant pour l'interrogation des nombres – arnpry

+0

Quelle est la valeur réelle de 'check'? Le message d'erreur provient de' bc' – chepner

+0

La valeur réelle de '$ {check}' est '17.3' 'bc' peut gérer des nombres décimaux à virgule flottante donc je ne crois pas que ce soit le problème ici – arnpry