2 votes

Vérification d'une valeur à virgule flottante à l'intérieur d'une plage

Je me demande juste comment vérifier si une valeur flottante est comprise dans un certain intervalle en utilisant "bc" et les instructions conditionnelles de bash. Merci d'avance

Par exemple, je veux savoir si 17,2 se situe dans l'intervalle de 17,5 à 18,2.

J'ai récemment appris que je pouvais utiliser bc pour vérifier une déclaration de ce type :

if [ $(bc <<< "$result > 17.5") -eq 1 ]

J'ai essayé de le faire if [ $(bc <<< "$result > 17.5") && $(bc <<< "$result <= 18.2") -eq 1 ]

Mais je continue à obtenir une erreur de syntaxe et je ne sais pas si c'est l'expression ou la syntaxe correcte.

4voto

John O'Brien Points 21

Vous ne pouvez pas utiliser && entre crochets simples. Vous avez cependant d'autres options :

  1. Utilice -a à l'intérieur de [ ... ] .

    if [ $(bc <<< "$result > 17.5") -eq 1 -a $(bc <<< "$result <= 18.2") -eq 1 ]
  2. Utiliser des doubles crochets [[ ... ]] qui soutiennent && .

    if [[ $(bc <<< "$result > 17.5") == 1 && $(bc <<< "$result <= 18.2") == 1 ]]
  3. Utiliser deux [ ... ] conditions séparées par && .

    if [ $(bc <<< "$result > 17.5") -eq 1 ] && [ $(bc <<< "$result <= 18.2") -eq 1 ]
  4. Vous pouvez utiliser la comparaison de chaînes de caractères sur le résultat des deux expressions

    [[ $( bc <<< "$result > 17.5; %result <= 18.2" ) == $'1\n1' ]]
  5. bc comprend && également :

    if [[ $(bc <<< "$result > 17.5 && $result <= 18.2") == 1 ]]

Je préférerais 5 .

1voto

Tim Points 30349

Bash ne peut pas gérer les flottants.

Tout d'abord, nous déterminons s'ils se situent ou non dans la fourchette. Si c'est le cas (1), le nombre se trouve dans l'intervalle :

test=$(echo "17.5<$result<18.2" | bc)

Nous vérifions ensuite qu'elle est vraie à l'aide d'un "si".

if [ $test -eq 1 ]
then
    echo true
else
    echo false
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X