Olá pessoal, hoje vamos aprender utilizar o BC , que é uma linguagem de programação, que podemos utilizar como calculadora no bash. Por ser uma linguagem de programação temos a opção de utilizar estrutura condicional, laços de repetições e outros recursos da linguagem.
O BC permite várias operações matemática e possui algumas operações definidas por padrão.
-
^
(potenciação); -
*
(multiplicação) e/
(divisão); -
+
(adição),-
(subtração),%
(resto da divisão); -
sqrt(x)
(raiz quadrada de x); e -
last
(último resultado).
Abra o terminal e execute o comando a seguir, para ter acesso ao modo interativo:
bc
Digite as expressões a seguir, depois de digitar cada expressão pressione a tecla Enter
para visualizar o resultado.
2^8
4*2
5/2
10%3
2+2
21-5
sqrt(last)
sqrt(81)
last-2
Podemos observar que o resultado da divisão de 5 por 2 não foi exatamente o esperado, para isso temos que utilizar o scale=2
para o resultado ter duas casas decimais após o ponto.
Para sair do modo interativo, utilize quit.
Outra forma para utilizar no modo interativo é ativar a biblioteca padrão de funções matemáticas, com a opção -l
que tem por padrão o scale=20
e assim podemos utilizar as seguintes funções:
-
s(x)
o seno dex
, ondex
é em radianos; -
c(x)
o cosseno dex
, ondex
é em radianos; -
a(x)
o arcotangente dex
, a resposta é dada em radianos; -
l(x)
o logaritmo natural dex
; -
e(x)
a função exponencial dee
elevado ax
; e -
j(n, x)
a função de Bessel da ordem den
dex
;
Agora vamos ver alguma opções de execução do BC diretamente na linha de comando.
Primeira forma de utilização:
bc <<< "scale=3;7/3"
Segunda forma de utilização:
echo "scale=3;7/3" | bc
Vamos utilizar o BC para conversão de base com os comandos ibase
(base numérica de entrada) e obase
(base numérica de saída), por padrão a base de entrada e saída é 10, e se utilizar apenas um dígito será interpretado em hexadecimal, veja alguns exemplos:
Converter o número hexadecimal 3F para decimal.
bc <<< "ibase=16;obase=A;3F"
Converter o número decimal 63 em hexadecimal.
bc <<< "ibase=A;obase=16;63"
Converter o número decimal 63 em octal.
bc <<< "ibase=A;obase=8;63"
Converter o número octal 77 em decimal.
bc <<< "ibase=8;obase=A;77"
Converter o número decimal 63 em binário.
bc <<< "ibase=A;obase=2;63"
Converter o número binário 111111 em decimal.
bc <<< "ibase=2;obase=A;111111"
Também podemos criar um script para verificar se o número é ímpar ou par, crie o arquivo abaixo e salve o arquivo com o nome par-ou-impar.bc
:
#!/usr/bin/bc -l
# autor: Francisco Chaves <https://franciscochaves.com.br>
# descrição: Descubra se o número é ímpar ou par
print "\n"
for (i=0; i < 40; i++) {
print "*"
}
print "\nInsira um número inteiro\n"
num = read()
if (num % 2 == 0) {
print "Número é par"
} else {
print "Número é ímpar"
}
print "\n"
cont=0
while (cont++ < 40) {
print "*"
}
print "\n"
quit
Atribua permissão de execução ao arquivo:
chmod +x par-ou-impar.bc
Execute o arquivo e insira um valor válido, o BC não tem tratamento de erros:
./par-ou-impar.bc
Outra coisa bem interessante é a criação de funções com o BC , para isso utilizamos o comando define
. Vamos criar o script com o nome calculadora.bc
com funções de uma simples calculadora.
#!/usr/bin/bc -l
# autor: Francisco Chaves <https://franciscochaves.com.br>
# descrição: Operações matemáticas básicas
define soma(a, b) {
return a + b
}
define subtracao(a, b) {
return a - b
}
define multiplicacao(a, b) {
return a * b
}
define divisao(a, b) {
scale=2
return a / b
}
print "\n ********CALCULADORA******** \n"
print "\nDigite o primeiro número:\n"
num1 = read()
print "\nDigite o segundo número:\n"
num2 = read()
print "\n **Soma** \n "
soma(num1, num2)
print "\n **Subtração** \n "
subtracao(num1, num2)
print "\n **Multiplicação** \n "
multiplicacao(num1, num2)
print "\n **Divisão** \n "
divisao(num1, num2)
quit
Para conhecer mais sobre o BC consulte o manual com o comando abaixo:
man bc
Referências
BC | GUIA LINUX. [s.d.]. UNIRIO / CCET - Ensino e Pesquisa - Produzir e disseminar conhecimento. Disponível em: https://guialinux.uniriotec.br/bc/. Acesso em: 24 dez. 2020.
CONVERSÃO DE BASE NO SHELL. 9 ago. 2017. Mente Binária. Disponível em: https://www.mentebinaria.com.br/forums/topic/54-conversão-de-base-no-shell/. Acesso em: 24 dez. 2020.
ENTENDEU “IBASE” E “OBASE” EM CASO DE CONVERSÕES COM BC?. QA Stack. Disponível em: https://qastack.com.br/unix/199615/understand-ibase-and-obase-in-case-of-conversions-with-bc. Acesso em: 24 dez. 2020.
PAPO BINÁRIO. Cálculo No Shell Com O Bc. 8 mar. 2017. YouTube. Disponível em: https://www.youtube.com/watch?v=vLhABLeb11o. Acesso em: 24 dez. 2020.
PINHEIRO, Renan. BC: A Sua Calculadora Programvel No Linux [Artigo]. 21 maio 2006. VIVA O LINUX. Disponível em: https://www.vivaolinux.com.br/artigo/BC-A-sua-calculadora-programavel-no-Linux. Acesso em: 24 dez. 2020.
SLACKJEFF. BC, CALCULADORA DO BASH. 12 set. 2017. YouTube. Disponível em: https://www.youtube.com/watch?v=5FGmQB-pM2Y. Acesso em: 24 dez. 2020.
Top comments (2)
Acho interessante conhecer a linguagem desses utilitários, como sed e awk também, normalmente são bem mais simples quando comparado a outras linguagens de programação de uso geral e é possível fazer muita coisa com elas.
Uma opção para o bc é o dc, que é uma calculadora polonesa-reversa, e pode ser interessante também para alguns casos.
Também acho bem legal ter o conhecimento nos utilitários de linha de comando, podemos precisar em algum momento, além de ajudar bastante e principalmente para criar scripts em Shell. Não conhecia o dc, parece interessante, valeu amigo!!