J'essaie de comparer deux valeurs décimales mais je reçois des erreurs ..__
if [ "$(echo $result1 '>' $result2 | bc -l)" -eq 1 ];then
comme suggéré par l'autre fil de débordement de pile.
Je reçois des erreurs.
Quelle est la bonne façon de s'y prendre?
Vous pouvez le faire en utilisant le contexte numérique de Bash:
if (( $(echo "$result1 > $result2" | bc -l) )); then
bc
donnera 0 ou 1 et le (( ))
les interprétera respectivement comme faux ou vrai.
La même chose avec AWK:
if (( $(echo "$result1 $result2" | awk '{print ($1 > $2)}') )); then
if awk 'BEGIN{exit ARGV[1]>ARGV[2]}' "$z" "$y"
then
echo z not greater than y
else
echo z greater than y
fi
Suite de la réponse de Dennis:
Bien que sa réponse soit correcte pour les points décimaux, bash jette (standard_in) 1: erreur de syntaxe avec une arithmétique en virgule flottante.
result1=12
result2=1.27554e-05
if (( $(echo "$result1 > $result2" | bc -l) )); then
echo "r1 > r2"
else
echo "r1 < r2"
fi
Cela renvoie une sortie incorrecte avec un avertissement, mais avec un code de sortie de 0.
(standard_in) 1: erreur de syntaxe
r1 <r2
Bien qu’il n’existe pas de solution claire à ce problème (discussion thread 1 et thread 2 ), j’ai utilisé le correctif partiel suivant en arrondissant les résultats en virgule flottante avec awk
suivi de l’utilisation de la commande bc
comme dans la réponse de Dennis et ce fil
Arrondir à la décimale désirée: La suite obtiendra un espace de répertoire récursif dans TB en arrondissant à la deuxième décimale.
result2=$(du -s "/home/foo/videos" | tail -n1 | awk '{$1=$1/(1024^3); printf "%.2f", $1;}')
Vous pouvez ensuite utiliser l'arithmétique bash comme ci-dessus ou utiliser [[ ]]
Enclosure comme dans thread suivant .
if (( $(echo "$result1 > $result2" | bc -l) )); then
echo "r1 > r2"
else
echo "r1 < r2"
fi
ou en utilisant l'opérateur -eq
où la variable bc
de 1 est vrai et 0 est faux
if [[ $(bc <<< "$result1 < $result2") -eq 1 ]]; then
echo "r1 < r2"
else
echo "r1 > r2"
fi
if [[ `echo "$result1 $result2" | awk '{print ($1 > $2)}'` == 1 ]]; then
echo "$result1 is greater than $result2"
fi