sergioaraujo

 

bc

Page history last edited by Anonymous 2 yrs ago

Definição

O comando 'bc' é uma calculadora para a linha de comando, mas não funciona da forma como você esperaria que fosse, em geral o comando recebe os números a serem manipulados através de um pipe

 | 

 

ao invés de passar parâmetros ao comando bc você pode simplesmente digitar bc

e entrar no programa bc.

 

Exemplos retirados do site dicas-l

fonte: http://www.dicas-l.com.br/dicas-l/20030728.php

$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
2.4567*3
7.3701
2^9
512
2+3+5
10
2-3-5
-6
scale=2
7/5
1.40
scale=9
7/5
1.400000000
10/3
3.333333333
Tudo o que você sempre quis saber sobre o comando bc mas ...
Colaboração: Fernando M. Roxo da Motta <<roxo (a) roxo org>>
O 'bc' (ver manual;)) é no final das contas uma linguagem de programação, junto com o pacote fonte tem uma série de exemplos de programas implementados nesta linguagem.
Mas e para uso imediato, sem precisar programação, que "guloseimas" a mais nós temos disponíveis? Segundo o manual:
-l, --mathlib
Define the standard math library.
Ahá !! Se usarmos o parâmetro "-l" vamos ter um conjunto extra de funcionalidade disponível :
$ bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
# função seno
s(30*3.14159265/180)
.49999999948185797677
# função cosseno
c(60*3.14159265/180)
.50000000103628404592
#função arco-tangente
pi=4*a(1)
pi
3.14159265358979323844
# pi !!!  ;))
# Mas eu quero mais dígitos
scale=50
pi=4*a(1)
pi
3.14159265358979323846264338327950288419716939937508
# Mas eu quero lidar com dinheiro, que só tem duas casas decimais
scale=2
7/3
2.33
As funções pré-definidas são :
s (x)  The sine of x, x is in radians.
c (x)  The cosine of x, x is in radians.
a (x)  The arctangent of x, arctangent returns radians.
l (x)  The natural logarithm of x.
e (x)  The exponential function of raising e to the value x.
j (n,x)
The bessel function of integer order n of x.
Mas nada impede de se definir novas funções. Na página do manual tem exemplos bem claros, dentre eles a definição de uma função "e(x)".
Para simplificar a minha vida eu coloquei no meu '.profile' (use no '.bashrc' se você usa só o Bash no Linux) uma linha :
alias bc='bc -l'
Desta forma quando eu chamo o 'bc' ele já carrega as funções por default.
Acabou ? Não, tem muito mais. Para o pessoal de TI que eventualmente precisa fazer conversões de base o 'bc' é uma excelente ferramenta :
$ bc
obase=16
2003
7D3
#  Mas e para entrar com hexadecimal ?
ibase=16
# saida em binário
obase=2
7D3
11111010011
# Voltando para saída em base 10 ?
obase=10
7D3
7D3
# Ué ?!!  Não pedimos saída na base 10 ?  Não, como a entrada é base 16
# "10" representa a própria base, portanto "16(decimal)".  Para ter a 
# saída na base "10(decimal)" precisamos especificar na base de entrada
# corrente
obase=A
7D3
2003
# Para voltar a entrada para base "10(decimal)" precisamos usar o mesmo
# procedimento
ibase=A
2003
2003
Como a base corrente é sempre representada como "10", qualquer que seja ela, usar "ibase=10" não altera nada.
Tem mais ? Tem, mas vou deixar para uma leitura da página do manual. ;))
Roxo 

 

preciso calcular numeros contidos num arquivo ex:

Fonte: http://br.groups.yahoo.com/group/shell-script - Mensagem 19183

arquivo valores.txt contem
#cat valores.txt
23
21
90
32
o comando deve me retornar a soma de todos estes numeros, alguem pode
me dar um help?
$ paste -sd+ valores.txt | bc
166
A opção -s transforma coluna em linha, a opçao -d indica o
delimitador e bc é uma calculadora. Veja só o paste:
$ paste -sd+ valores.txt
23+21+90+32

 

Números quebrados

use "scale"

echo "scale=2; 13 / 2" | bc

 

Usando "here document"

Esta técnica permite fazer algo assim:

Digita-se o comando bc seguido de << EOF

o comando só terminará quando for digitado EOF,

daí tudo que digitado será processado pelo bc e

o mesmo retoranará o resultado.

bc << EOF
18.34 * 34.12
EOF

 

Veja também

Comments (0)

You don't have permission to comment on this page.