Posso ler os números e a operação com:
echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op
mas todas as minhas tentativas de somar os números falham:
case "$op" in
"+")
echo num1+num2;;
"-")
echo `num1-num2`;;
esac
Correr:
First number please
1
Second mumber please
2
Operation?
+
Saída:
num1+num2
...ou...
echo $num1+$num2;;
# results in: 1+2
...ou...
echo `$num1`+`$num2`;;
# results in: ...line 9: 1: command not found
Parece que ainda estou recebendo strings quando tento add add ("2+2" em vez de "4").
Responder1
Aritmética em shells POSIXé feito com $
parênteses duplos (( ))
:
echo "$(($num1+$num2))"
Você pode atribuir a partir disso; observe também que os $
operadores nos nomes das variáveis internas (())
são opcionais):
num1="$((num1+num2))"
Há também expr
:
expr $num1 + $num2
Em scripts $(())
é preferível, pois evita uma bifurcação/execução do expr
comando.
Responder2
A resposta existente é pura bash, então será mais rápida que isso, mas só pode lidar com números inteiros. Se você precisar lidar com carros alegóricos, terá que usar o programa externo bc
.
$ echo 'scale=4;3.1415+9.99' | bc
13.1315
A scale=4
instrução diz bc
para usar quatro casas decimais. Consulte man bc
para obter mais informações.
Responder3
Você também pode usar $[ ... ]
estrutura. Nesse caso, usamos o mecanismo embutido no Bash, que é mais rápido e um pouco mais conveniente de usar. Como sabemos que tudo entre $[ e ] é tratado como uma expressão, não precisamos preceder as variáveis com $
. Da mesma forma, não precisamos evitar *
tratá-lo como um padrão.
num1=2
num2=3
echo $[num1 + num2]
5
Responder4
minimalista
total=0
((total+=qty))