1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Calcular expressoes matematicas na shell

Discussão em 'Novidades GNU/Linux & *nix World' iniciada por DanielDenis, 23 de Maio de 2007. (Respostas: 19; Visualizações: 1643)

  1. DanielDenis

    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?
     
  2. ruimoura

    ruimoura Power Member

    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: 23 de Maio de 2007
  3. DanielDenis

    DanielDenis Power Member

    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
     
  4. PrOdG

    PrOdG Power Member

    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.
     
  5. DanielDenis

    DanielDenis Power Member

    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 ?
     
  6. PrOdG

    PrOdG Power Member

    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 ]
     
  7. grafo

    grafo Folding Member

    o / também não precisa de \ :P o único que precisa é o * (para além dos parenteses)
     
  8. ruimoura

    ruimoura Power Member

    Assim fica mais simples. Cool ;)
     
  9. PrOdG

    PrOdG Power Member

    Pois não, o problema original era o espaço entre o / e o 5. Como corrigi logo mentalmente nem reparei que lá estava :P
     
  10. madskaddie

    madskaddie Power Member

    Entao e o BC, não serve?? Vem instalado com a maioria das distros...


    Podes sempre usar Python :D que tambem vem com a maioria das distros!
     
  11. PrOdG

    PrOdG Power Member

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


    .. mas ele pediu em bash ;)
     
  12. rolando2424

    rolando2424 Power Member

    Podia instalar o package qalc ou wcalc, mas isso só seria possível se ele podesse instalar programas no server.
     
  13. madskaddie

    madskaddie Power Member

    <rant mode>


    Ai sim?? Não vi nada disso:


    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
     
  14. PrOdG

    PrOdG Power Member

    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 ;)
     
  15. ruimoura

    ruimoura Power Member

    Vocês curtem bué inventar ... o homem acede a shell por ssh ... simples ... já foi dada a resposta ...
     
  16. PrOdG

    PrOdG Power Member

    Mas será que não se pode ter um despique à vontade nesta zona do fórum? :P
     
  17. ruimoura

    ruimoura Power Member

    Be my guest :msmiley1:
     
  18. madskaddie

    madskaddie Power Member


    Falou sim: olha para o título :002: 'Calcular expressoes matematicas na shell'
     
  19. PrOdG

    PrOdG Power Member

    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 ;)
     
  20. DanielDenis

    DanielDenis Power Member

    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.
     

Partilhar esta Página