Substituir:
if [ $current_price < $new_price ]; then
ARROW="+"
else if [ $current_price > $new_price ]; then
ARROW="-"
else
ARROW="="
fi
fi
Com:
if echo "$current_price < $new_price" | bc | grep -q 1; then
ARROW="+"
elif echo "$current_price > $new_price" | bc | grep -q 1; then
ARROW="-"
else
ARROW="="
fi
No teste ( [
), o operador para comparação numérica menor do que a comparação é -lt
não <
. (Isso ocorre porque <
é para redirecionamento de entrada.) Assim, se seus preços fossem inteiros, você poderia usar:
if [ "$current_price" -lt "$new_price" ]; then
Mas, seus preços são de ponto flutuante, então precisamos de bc
ou equivalente para fazer as contas. bc
imprime 1
se uma condição lógica for verdadeira e 0
se for falsa. Seguimos isso com grep -q 1
, que define um código de retorno adequado que if
pode usar.
Além disso, observe que o bash suporta elif
, que fornece uma sintaxe mais simples do que else if
. Por fim, muitos usuários acham que o recuo torna os comandos bash como if-then-else-fi
mais fáceis de ler.