Calcular expressoes matematicas na shell

DanielDenis

Power Member
Boas,precisava aqui da ajuda dos mais entendidos,estou a trabalhar em ssh e precisava de ajuda para calcular expressoes do genero 5*2 + 4*10 ou até mesmo uma fracção tipo 5*2 + 4*10 tudo sobre 5.

Penso que o comando a usar é o expr mas nao compreendo os argumentos.

Sugestoes?
 
Boas,precisava aqui da ajuda dos mais entendidos,estou a trabalhar em ssh e precisava de ajuda para calcular expressoes do genero 5*2 + 4*10 ou até mesmo uma fracção tipo 5*2 + 4*10 tudo sobre 5.

Penso que o comando a usar é o expr mas nao compreendo os argumentos.

Sugestoes?

Exemplo:
expr \( 3 \* 2 \) + \( 2 \* 2 \) --> três vezes dois mais dois vezes dois

expr \( 3 \+ 3 \) / 2 --> três mais três sobre dois

Por alguma razão que desconheço, o sinal de + e - não precisam da barra antes, mas podes por na mesma, por uma questão de coerência.

Capixe?
 
Última edição:
Hummm da me erro de sintax

expr \( 5 \* 2 \) + \( 4 \ * 10 \)

o help da me isto

Usage: expr EXPRESSION
or: expr OPTION

--help display this help and exit
--version output version information and exit

Print the value of EXPRESSION to standard output. A blank line below
separates increasing precedence groups. EXPRESSION may be:

ARG1 | ARG2 ARG1 if it is neither null nor 0, otherwise ARG2

ARG1 & ARG2 ARG1 if neither argument is null or 0, otherwise 0

ARG1 < ARG2 ARG1 is less than ARG2
ARG1 <= ARG2 ARG1 is less than or equal to ARG2
ARG1 = ARG2 ARG1 is equal to ARG2
ARG1 != ARG2 ARG1 is unequal to ARG2
ARG1 >= ARG2 ARG1 is greater than or equal to ARG2
ARG1 > ARG2 ARG1 is greater than ARG2

ARG1 + ARG2 arithmetic sum of ARG1 and ARG2
ARG1 - ARG2 arithmetic difference of ARG1 and ARG2

ARG1 * ARG2 arithmetic product of ARG1 and ARG2
ARG1 / ARG2 arithmetic quotient of ARG1 divided by ARG2
ARG1 % ARG2 arithmetic remainder of ARG1 divided by ARG2

STRING : REGEXP anchored pattern match of REGEXP in STRING

match STRING REGEXP same as STRING : REGEXP
substr STRING POS LENGTH substring of STRING, POS counted from 1
index STRING CHARS index in STRING where any CHARS is found, or 0
length STRING length of STRING
+ TOKEN interpret TOKEN as a string, even if it is a
keyword like `match' or an
 
Tens um espaço entre \ e *.

E btw, se quiseres tirar as barras, faz
Código:
expr $[expressao]
E nem precisas do expr, basta um simples echo. Têm é atenção que em ambos a divisão é inteira, 5/3 = 1.
 
Silly me ! Ja devia saber do C que este tipo de erros tem sempre uma solução obvia mas por mais que olhasse pra expressao nao ia ver o espaço,às vezes é assim.

E agora para aplicar a fracçao pensei que bastaria por /5 no fim mas não...

expr \( 5 \* 2 \) + \( 4 \* 10 \) /5 ?
 
O '/' também precisa de um caracter de escape antes. Daí as '\'.
Código:
expr \( 5 \* 2 \) + \( 4 \* 10 \) \/ 5
ou mais fácil
Código:
echo $[(5 *2) + (4 * 10) / 5]

Mas se o que tu queres é colocar TUDO sobre 5, então faltam-te aí dois parênteses:
Código:
echo $[ ((5 * 2) + (4 * 10)) / 5 ]
 
<rant mode>

Também podes utilizar php, perl, C, C++, java, assembly..

.. mas ele pediu em bash ;)


Ai sim?? Não vi nada disso:

Boas,precisava aqui da ajuda dos mais entendidos,estou a trabalhar em ssh e precisava de ajuda para calcular expressoes do genero 5*2 + 4*10 ou até mesmo uma fracção tipo 5*2 + 4*10 tudo sobre 5.

Penso que o comando a usar é o expr mas nao compreendo os argumentos.

Sugestoes?


shell <> bash

</rant mode>


Não é para levar a mal (é demasiado estúpido para de dares ao trabalho de responder ;) ) mas ele fala é que está aceder remotamente à máquina. De qualquer modo já ganhei: fiquei a saber que havia interface para a linha de comandos para o php... coisa que ignorava por completo
 
No offense taken. Mas se vamos ser picuinhas ele também não falou em shell :P

E o CLI do php é do melhor para o debug ;)
 
Damn, eu sabia que tinha lido shell em qualquer lado :(
Afinal ele sempre pediu para shell, só não referiu qual. E como a maior percentagem dos desktops tem bash, é o meu 3º post sem interesse neste tópico. Chega de offtopic ;)
 
Bem o que interessa é que fiquei a perceber,a solução com os [ ] é óptima.
Eu deveria ter dito logo inicialmente que me estava a ligar por ssh e a trabalhar na bash,ou para aflorar um bocado a coisa e tambem mandar o meu bitaite,na born again shell. :P

Obrigado a todos.
 
Back
Topo